Здравствуйте. Всем добра и счастья. Буду краток: есть макрос, не могу понять, где и что написать, что бы пропускало пустые ячейки: [vba]
Код
Function ОбъединитьСРазделителем(Разделитель As String, ParamArray Значения()) As String Dim result As String, arg, rc As Range For Each arg In Значения Select Case TypeName(arg) Case "Range" 'это диапазон 'цикл по всем ячейкам For Each rc In arg.Cells If result = "" Then result = rc.Value Else result = result & Разделитель & rc.Value End If Next End Select Next ОбъединитьСРазделителем = result End Function
[/vba] Спасибо всем
Здравствуйте. Всем добра и счастья. Буду краток: есть макрос, не могу понять, где и что написать, что бы пропускало пустые ячейки: [vba]
Код
Function ОбъединитьСРазделителем(Разделитель As String, ParamArray Значения()) As String Dim result As String, arg, rc As Range For Each arg In Значения Select Case TypeName(arg) Case "Range" 'это диапазон 'цикл по всем ячейкам For Each rc In arg.Cells If result = "" Then result = rc.Value Else result = result & Разделитель & rc.Value End If Next End Select Next ОбъединитьСРазделителем = result End Function
Function ОбъединитьСРазделителем(Разделитель As String, ParamArray Значения()) As String Dim result As String, arg, arr As Variant, rc As Variant For Each arg In Значения Select Case TypeName(arg) Case "Range" 'это диапазон arr = IIf(arg.Count > 1, arg.Value, Array(arg.Value)) Case "Variant()" 'это массив arr = arg Case Else arr = Array(arg) End Select 'цикл по всем значениям массива For Each rc In arr If Not IsEmpty(rc) And rc <> "" Then result = result & IIf(result <> "", Разделитель, "") & rc End If Next rc, arg ОбъединитьСРазделителем = result End Function
[/vba]
Здравствуйте [vba]
Код
Function ОбъединитьСРазделителем(Разделитель As String, ParamArray Значения()) As String Dim result As String, arg, arr As Variant, rc As Variant For Each arg In Значения Select Case TypeName(arg) Case "Range" 'это диапазон arr = IIf(arg.Count > 1, arg.Value, Array(arg.Value)) Case "Variant()" 'это массив arr = arg Case Else arr = Array(arg) End Select 'цикл по всем значениям массива For Each rc In arr If Not IsEmpty(rc) And rc <> "" Then result = result & IIf(result <> "", Разделитель, "") & rc End If Next rc, arg ОбъединитьСРазделителем = result End Function
У krosav4ig правильный полноценный макрос, учитывающий кучу вариантов. Если же только Ваш код доделать, то можно, например, так [vba]
Код
Function ОбъединитьСРазделителем(Разделитель As String, ParamArray Значения()) As String Dim result As String, arg, rc As Range For Each arg In Значения For Each rc In arg.Cells If rc <> "" Then result = result & Разделитель & rc.Value End If Next Next ОбъединитьСРазделителем = Mid(result, Len(Разделитель) + 1) End Function
[/vba]
У krosav4ig правильный полноценный макрос, учитывающий кучу вариантов. Если же только Ваш код доделать, то можно, например, так [vba]
Код
Function ОбъединитьСРазделителем(Разделитель As String, ParamArray Значения()) As String Dim result As String, arg, rc As Range For Each arg In Значения For Each rc In arg.Cells If rc <> "" Then result = result & Разделитель & rc.Value End If Next Next ОбъединитьСРазделителем = Mid(result, Len(Разделитель) + 1) End Function
krosav4ig, спасибо за оперативный ответ, единственное, что получилось - ячейки объединяются с верху в низ, и переходили в право на следующий столбец и так далее. В изначальном скрипте - ячейки объединяются с лева на право, и по ходу в низ. Однозначно ваш вариант в копилку. Спасибо!
krosav4ig, спасибо за оперативный ответ, единственное, что получилось - ячейки объединяются с верху в низ, и переходили в право на следующий столбец и так далее. В изначальном скрипте - ячейки объединяются с лева на право, и по ходу в низ. Однозначно ваш вариант в копилку. Спасибо!yurikfirst
*****Меньше телодвижений - больше времени на отдых*****