首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA查询循环scripting.dictionary

VBA查询循环scripting.dictionary
EN

Stack Overflow用户
提问于 2017-02-02 07:38:27
回答 2查看 622关注 0票数 1

我有这个:

代码语言:javascript
复制
 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中。当然,在最后一行之后,它可能不会设置逗号。

我想我是在正确的道路上,但有遗漏的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-02 07:46:58

要获得字符串的所有唯一值,可以修改代码,如下所示

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

请使用MsgBox Left$(strOut, Len(strOut) - 2)修复尾随不需要的部分。

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2017-02-02 08:56:37

只是为了加入一个更简洁的brettdj解决方案。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41996583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档