2016-04-18 6 views
2

辞書をループするコードがあります。ディクショナリ内の各キーの値は、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。

私はこれを修正するために何ができますか?

+0

コードスニペットは、多くのエラーがあります。 (例えば、 'CreateObject'の前に' Set'がなく、そのようなループの中で 'Add'を使うと、' value already with value'というエラーが発生します)。実際に動作し、問題を確実に再現するコードを投稿してください。 –

+0

コードを更新しました。それは今指定されているように動作する(または動作しない)必要があります。 – Metalgearmaycry

+0

しかし、 'String'は有効なVBA変数名ではありません –

答えて

0

あなたがarrの寸法ときにのみ、単一のアレイを作成したので、あなたは

for i = 1 to 10 
    Str = "str"&i 
    arr(1) = "str"&i+1 
    arr(2) = 0 
    Dict.Add Str, arr 
next 

でいくつかの奇妙なエイリアシングを作成しています。

あなたが望んでいた何をすべきかの辞書の辞書を作成することができます。

Sub test() 

Dim Dict As Object, Str, i, arr 
Set Dict = CreateObject("Scripting.Dictionary") 


For i = 1 To 10 
    Set arr = CreateObject("Scripting.Dictionary") 
    arr.Add 1, "str" & i + 1 
    arr.Add 2, 0 
    Str = "str" & i 
    Dict.Add Str, arr 
Next 

For i = 1 To 10 
    Debug.Print (Dict("str" & i)(1)) 
Next i 

Dict("str1")(1) = "Bob" 
Debug.Print Dict("str1")(1) 'prints Bob 

End Sub 
+0

その変更(Array()関数についてはわかりませんでした)でも問題は解決しません。 – Metalgearmaycry

+0

辞書の辞書やコレクションの辞書を使ったことがありますが、配列の辞書を作成するのはやや難解です。私はちょうど辞書の辞書に行きます。 –

+0

http://stackoverflow.com/questions/2404212/changing-array-values-in-a-vba-dictionary は、この同じトピックへの答えです。 – Metalgearmaycry

関連する問題