VBAjoin同等collections
如何joinVBA中的一个集合。 在VB.net中,我通常使用Join(…,“delimiter)连接数组,但是我无法弄清楚如何在VBA中使用集合来实现这个function。
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
我现在需要将所有的集合值join到一个string中
当你解决了你的问题,你可以加快你的代码
- 使用
SpecialCells
处理非空白而不是testing每个单元格 - 使用variables数组而不是范围循环
下面的代码使用Join
将最终的string合并在一起。 如果您没有string操作( "a = ''" + cell.Text + "'' "
部分),那么您可以简单地join步骤1中的specialcells范围
更新以处理SpecialCells集合中的多个区域和单个单元格(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
其他方式:
joinedString = "a='" & Replace(Join(Application.Transpose(Sheet1.Range("D13:D263").Value), "',a='"), ",a=''", "")
我解决了我自己的问题,我只是声明一个string占位符,并在每个集合中的项目添加到string,然后输出单个string占位符的结果。