VBA查询循环scripting.dictionary

时间:2017-02-02 07:38:28

标签: excel vba excel-vba dictionary while-loop

我有这个:

 Set dict = CreateObject("Scripting.Dictionary")

    rn = 2
    Do While ThisWorkbook.Sheets("1").Range("B" & rn).Value <> ""
        If (ThisWorkbook.Sheets("1").Range("B" & rn).Value <> "") Then dict("&&1") = dict & ThisWorkbook.Sheets("1").Range("B" & rn).Value & ", "
        rn = rn + 1
    Loop

但这不起作用,我在VBA中得到错误450。

它需要做的是:B列中的每个值(如果它不是空的)必须添加到用逗号分隔的dict中。在最后一行之后的当然,它可能没有设置逗号。

我认为我的方式正确,但缺少了一些东西。

2 个答案:

答案 0 :(得分:0)

要获取字符串的所有唯一值,您可以按如下方式修改代码

请注意,您应使用ThisWorkbook.Sheets(1)而不是ThisWorkbook.Sheets("1")

请使用MsgBox Left$(strOut, Len(strOut) - 2)来修复尾随的非必需部分

Sub a()
Dim ws As Worksheet
Set dict = CreateObject("Scripting.Dictionary")
Dim strOut As String

Set ws = Sheets(1)

    rn = 2
    Do While ws.Range("B" & rn).Value <> ""
        If Len(ws.Range("B" & rn).Value) > 0 Then
            If dict.exists(ws.Range("B" & rn).Value) Then
              Else
                dict.Add ws.Range("B" & rn).Value, 1
            strOut = strOut & (ws.Range("B" & rn).Value & ", ")
            End If
        End If
        rn = rn + 1
    Loop
    MsgBox strOut
End Sub

答案 1 :(得分:0)

只是为了提供更简洁的brettdj解决方案

Sub main()
    Dim cell As Range
    Dim strOut As String

    With CreateObject("Scripting.Dictionary")
        For Each cell In Sheets(1).Range("B2", Sheets(1).Cells(.Rows.Count, "B")).SpecialCells(xlCellTypeConstants, xlTextValues)
            .Item(cell.Value) = 1
        Next
        strOut = Join(.keys, ",")
        MsgBox strOut
    End With
End Sub