我有这个:
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中。在最后一行之后的当然,它可能没有设置逗号。
我认为我的方式正确,但缺少了一些东西。
答案 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