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中

当你解决了你的问题,你可以加快你的代码

  1. 使用SpecialCells处理非空白而不是testing每个单元格
  2. 使用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占位符的结果。