VBA Join эквивалент для коллекций - PullRequest
3 голосов
/ 05 марта 2012

Как мне присоединиться к коллекции в VBA. В VB.net я обычно объединяю массивы, используя Join (..., "delimiter), но я не могу понять, как это сделать, используя collection в VBA.

Dim oColl As New Collection
Dim r As Range

Set r = ThisWorkbook.Sheets("Work1").Range("D13:D263")

For Each cell In r
     If IsEmpty(cell) Then

     Else
         oColl.Add ("a = ''" + cell.Text + "'' ")
     End If
Next

Теперь мне нужно объединить все значения коллекции в одну строку

Ответы [ 3 ]

5 голосов
/ 05 марта 2012

Пока вы решили свой вопрос, вы можете ускорить код на

  1. Использование SpecialCells для работы с пробелами вместо проверки каждой ячейки
  2. Использовать вариантный массив вместо цикла диапазона

Приведенный ниже код использует Join для объединения последних строк. Если у вас не было манипуляции со строками (часть "a = ''" + cell.Text + "'' "), вы можете просто присоединиться к диапазону специальных ячеек с шага 1

Обновлен для обработки нескольких областей в коллекции SpecialCells и отдельных ячеек (где вариаты не работают)

Sub Diff()
Dim rng1 As Range
Dim rng2 As Range
Dim varTest
Dim strOut As String
Dim lngrow As Long
On Error Resume Next
With Range("D13:D263")
    Set rng1 = .SpecialCells(xlCellTypeConstants)
    If Not rng1 Is Nothing Then
        Set rng1 = Union(rng1, .SpecialCells(xlCellTypeFormulas))
    Else
        Set rng1 = .SpecialCells(xlCellTypeFormulas)
    End If
End With
On Error GoTo 0
If rng1 Is Nothing Then Exit Sub
For Each rng2 In rng1.Areas
    If rng2.Cells.Count > 1 Then
        varTest = Application.Transpose(rng2)
        For lngrow = 1 To UBound(varTest)
            varTest(lngrow) = "a = ''" & varTest(lngrow) & "'' "
        Next
        strOut = strOut & Join(varTest, ",")
    Else
        strOut = strOut & "a = ''" & rng2.Value & "'' "
    End If
Next
MsgBox strOut
End Sub
2 голосов
/ 05 марта 2012

Другой способ:

joinedString = "a='" & Replace(Join(Application.Transpose(Sheet1.Range("D13:D263").Value), "',a='"), ",a=''", "")
0 голосов
/ 05 марта 2012

Я решил свой собственный вопрос, я просто объявил заполнитель строки и в каждом для элементов коллекции, которые я добавил в строку, затем вывел результаты одного заполнителя строки.

...