[VBA] 連想配列について
こちらの識者の方々にはいつもお世話になっています。
VBAの質問です。
環境は下記になります。
OS=windowsXP SP3
Office=Excel2003(11.8347.8403) SP3
データ量が多いのでVLOOKUPの処理を連想配列を使ってやりたいのですが、できなくて困っています。
言葉では説明しずらいので、やりたいことのコードを提示します。
:Sheet2
品名 1月 2月
りんご 2 3
ばなな 4 5
下記、VBAコード
----------------------------------------------------
Option Explicit
Sub test()
Dim oDict As Object
Dim Ary As Variant
Dim EndRow As Long
Dim i As Long
Ary = Sheets("Sheet2").Range("A2:C3").Value
Set oDict = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Ary)
oDict(Ary(i, 1)) = Ary(i, 2)
oDict(Ary(i, 2)) = Ary(i, 3)
Next i
With ThisWorkbook.Sheets("Sheet1")
EndRow = .Cells(Rows.Count, 1).End(xlUp).Row
Ary = .Range("A1:Y" & EndRow).Value
For i = 2 To EndRow
Ary(i, 24) = oDict(Ary(i, 1))
Ary(i, 25) = oDict(Ary(i, 2))
Next i
.Range("A1:Y" & EndRow) = Ary
End With
MsgBox "done"
End Sub
----------------------------------------------------
というコードなのですが、
For i = 1 To UBound(Ary)
oDict(Ary(i, 1)) = Ary(i, 2)
oDict(Ary(i, 2)) = Ary(i, 3)
Next i
が、oDict(Ary(i, 1)) = Ary(i, 2)だけ配列に格納される状態です。
指定の文字列(Key)に対応するItemを返すのが連想配列だと思うのですが、上記コードで、
oDict(Ary(1, 1))=2
oDict(Ary(2, 1))=4
oDict(Ary(1, 2))=3
oDict(Ary(2, 2))=5
という配列に格納されない理由がわかりません。
Scripting.Dictionaryで辞書に格納できるデータになにかしらの制限があるのでしょうか?
質問に不備不足等ございましたらご指摘ください。
ご面倒お掛けしますがよろしくお願いします。
補足
nawkです。 いかがでしょうか?