辞書をループするコードがあります。ディクショナリ内の各キーの値は、2項目の配列です(辞書は名前[文字列、整数]のように見えます)。 辞書を後で参照すると、辞書エントリに属する配列の文字列と整数を表示して印刷できますが、辞書(name)(2)= 5のような通常の割り当てで整数を変更することはできません。コード内でそうした後、私は配列値をデバッグファイルに出力し、配列値は変更された値ではなく元の値です。どうしてこれがうまくいかず、どうやって動かせるのか分かりません。私が配列で読んだことは、配列(0)=何かを割り当てるだけだと言います。Excel VBA:配列に値を再割り当てできません
オリジナルの辞書の定義:
dim Dict as Object
Set Dict = CreateObject("Scripting.Dictionary")
for i = 1 to 10
strnum = "str"&i
Dict.Add strnum, array("str"&i+1,0)
next
'printing each item in dict returns "Str1: [str2,0]", etc. as it should
辞書での作業:
For each Cell in Range("a1:a11")
If Cell.Value <> "" And Dict.exists(Cell.Value) Then
name = Cell.Value
range = Dict(name)(0)
If Dict(name)(1) = 1 Then
'we have already located the name here
Else
Dict(name)(1) = 1
s = "Setting the found flag to " & Dict(name)(1)
debug.print s
'Dict(name)(1) returns 0 when it should return 1
end if
end if
next cell
範囲A1:A11はSTR1、STR2、STR3であるが、ここで
は、以下のコードの一部です。 、Str4、Str5 ... Str11。
私はこれを修正するために何ができますか?
コードスニペットは、多くのエラーがあります。 (例えば、 'CreateObject'の前に' Set'がなく、そのようなループの中で 'Add'を使うと、' value already with value'というエラーが発生します)。実際に動作し、問題を確実に再現するコードを投稿してください。 –
コードを更新しました。それは今指定されているように動作する(または動作しない)必要があります。 – Metalgearmaycry
しかし、 'String'は有効なVBA変数名ではありません –