VBA加入相当于集合

时间:2012-03-05 00:34:51

标签: excel vba join collections excel-vba

如何在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

我现在需要将所有集合值连接成一个字符串

3 个答案:

答案 0 :(得分:5)

虽然您已经解决了问题,但可以通过

加快代码速度
  1. 使用SpecialCells处理非空白而不是测试每个单元格
  2. 使用变量数组而不是范围循环
  3. 下面的代码使用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)

我解决了我自己的问题,我只是声明了一个字符串占位符,并且在每个集合中的项目中我添加到字符串然后输出单个字符串占位符的结果。