我试图初始化词典,但我不知道我需要3或4或10或其他什么。所以我尝试了以下内容:
dim wb1 as workbook
set wb1 = ThisWorkbook
dim strdict as new scripting.dictionary
For c = 1 To 65536 'for all rows
If strdict.Exists(wb1.Sheets(1).Cells(1, 4)) Then
'if that string has already been logged ie this is not the first pass of the current string, log it
strdict(wb1.Sheets(1).Cells(1, 4)) = strdict(wb1.Sheets(1).Cells(1, 4)) + 1
Else
strdict.Add wb1.Sheets(1).Cells(1, 4), 1
'if that string is not present, add it to the dictionary
dim left(wb1.Sheets(1).cells(1,4), 3) & "log" as Scripting.dictionary
End If
Next c
我不能说我感到惊讶
dim left(wb1.Sheets(1).cells(1,4), 3) & "log" as Scripting.dictionary
没有工作,但有没有办法完成我的想法?或者这是vba根本无法做到的事情?
答案 0 :(得分:2)
根据您发布的代码,我没有看到您需要多个词典。 好像你只想从Col D获得不同的价值和数量?
根据您的解释编辑更新
dim wb1 as workbook
dim dictCount as new scripting.dictionary
dim dictSub as new scripting.dictionary
dim k, kSub
set wb1 = ThisWorkbook
For c = 1 To 65536
k = wb1.Sheets(1).Cells(c, 4)
'seen this key before?
If Not dictCount.Exists(k) Then
dictCount.Add k, 0
dictSub.Add k, New Scripting.Dictionary
End If
dictCount(k) = dictCount(k) + 1 'increment count
'track sub strings
kSub = Left(k, 3)
If dictSub(k).Exists(kSub) Then
'increment the count
dictSub(k)(kSub)=dictSub(k)(kSub)+1
Else
dictSub(k).Add kSub, 0
End If
Next c