我试图编写一个搜索特定列的功能(称之为A列),用于术语"请求"。找到此行后,它会在同一行中搜索另一列(称为B列)以获取唯一的术语。目标是计算B列中有多少独特术语对应于术语" Request"在A栏中。我尝试这样做的方法是创建一个字典并在字词中不存在该术语时为其添加术语。该程序计算添加到字典中的术语数量,以便我知道有多少个唯一术语。但是,我现在的代码只是不断添加每个术语到字典,无论该术语是否已经存在。我现在已经试图弄清楚它已经有一段时间了,并且无法弄明白。这是代码:
j = 0
For i = 1 To LastRow
If Cells(i, 13).Value Like "Request" Then
Set dic = CreateObject("Scripting.Dictionary")
If Not dic.exists(Cells(i, 13)) Then
ucount = ucount + 1
dic.Add j, Cells(i, 13)
j = j + 1
End If
End If
Next i
我认为问题可能在于dic.Add功能,但我不确定。我对VBA和编码一般都比较新。
答案 0 :(得分:4)
Dim dict as Object, tmp
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To LastRow
If Cells(i, "A").Value = "Request" Then
tmp = Cells(i, "B").Value
If Not dict.exists(tmp) Then
dict.Add tmp, 1
End If
End If
Next i
Debug.Print dict.Count 'no need for a separate counter
答案 1 :(得分:1)
你的问题出在这一行:
Set dic = CreateObject("Scripting.Dictionary")
每次点击此行,您的词典都会重置并重新初始化。
在整个循环之前移动它:
j = 0
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To LastRow
If Cells(i, 13).Value Like "Request" Then
If Not dic.exists(Cells(i, 13).value) Then
ucount = ucount + 1
dic.Add j, Cells(i, 13).value
j = j + 1
End If
End If
Next i