如何在VBA中加入集合。在VB.net中,我通常使用Join(...,“delimiter)连接数组,但我无法弄清楚如何使用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
我现在需要将所有集合值连接成一个字符串
答案 0 :(得分:5)
虽然您已经解决了问题,但可以通过
加快代码速度SpecialCells
处理非空白而不是测试每个单元格下面的代码使用Join
将最终字符串合并在一起。如果你没有字符串操作("a = ''" + cell.Text + "'' "
部分),那么你可以简单地加入第1步的特殊区域
更新以处理SpecialCells Collection中的多个区域和单个单元格(varinats不起作用“
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
答案 1 :(得分:2)
另一种方式:
joinedString = "a='" & Replace(Join(Application.Transpose(Sheet1.Range("D13:D263").Value), "',a='"), ",a=''", "")
答案 2 :(得分:0)
我解决了我自己的问题,我只是声明了一个字符串占位符,并且在每个集合中的项目中我添加到字符串然后输出单个字符串占位符的结果。