問題があり、何か助けが必要です。私は、VBAの辞書を学ぶための簡単な例を作成し、すでに問題にぶつかっています。私は次のように設定している:VBA辞書はキーを複製しています
を、私は、キーと項目に追加して、キーにわたってループ処理をしようとしています。キーが存在する場合は、アイテムを追加します。代わりに起こっているのは、キーが複製されるということです。下の例では、私はAppleの代わりに2つのキーで終わります。私は間違っていますか?どんな助けでも大歓迎です。下記の関連コード:
Dim wkb As Workbook
Dim ws As Worksheet
Dim dict As Scripting.Dictionary
Set wkb = ActiveWorkbook
Set ws = wkb.ActiveSheet
'clearing old totals
ws.Range("C8:C9").ClearContents
Set dict = New Scripting.Dictionary
dict.CompareMode = vbTextCompare
For i = 3 To 6
If dict.Exists(ws.Cells(i, "B").Value) = False Then
MsgBox "doesnt exist, adding " & ws.Cells(i, "B")
dict.Add ws.Cells(i, "B"), ws.Cells(i, "C")
ElseIf dict.Exists(ws.Cells(i, "B").Value) Then
MsgBox "exists"
dict.Item(ws.Cells(i, "B")) = dict.Item(ws.Cells(i, "B")) + ws.Cells(i, "C").Value
End If
Next i
MyArray = dict.Keys
MsgBox "Keys are: " & Join(MyArray, ";")
MyArray = dict.Items
MsgBox "Items are: " & Join(MyArray, ";")
For Each k In dict.Keys
ws.Range("C8") = ws.Range("C8") + dict.Item(k)
If k = "Apples" Then
ws.Range("C9") = ws.Range("C9") + dict.Item(k)
End If
Next
辞書は重複しませんが、ケースと\を正規化するか、入力から空白をトリムする必要があるかもしれません。 – Comintern
ええ、それは問題だと思っていましたが、2つの "Apples"のエントリは同じです...トリミングする空白やケースは同じではありません。 – CodinglyClueless
@Cominternはすでに指摘しているように、辞書のキーは一意であり、だから、「アップル」の中に「幼虫」のように見えるが、そうではない人物がいるかもしれない。投稿された2つのリンゴをここで比較すると、最初のAはChrW(65)、2番目のAは実際はChrW(1040)実際にキリル文字から派生したものです。 – Ralph