2016-10-22 4 views
-1

ExcelシートからKey => Valueのペアを持つ辞書を作成する関数を作成しました。これまでのところうまく動作しますが、セルが同じ値を持つとき、私の辞書はキーが重複することがあります。辞書のキーとしてのVBAセル

誰でもこの現象を説明できますか?

Function CreateDictionaryBySheet(_ 
SheetName As String, _ 
Optional KeyColumn As Long = 1, _ 
Optional ValueColumn As Long = 2, _ 
Optional StartRow As Long = 2 _ 
) As Object 

Dim MyDictionary As Object 
Set MyDictionary = CreateObject("Scripting.Dictionary") 
Worksheets(SheetName).Activate 

Dim MaxRows As Long 
MaxRows = GetNumberOfRows(SheetName, KeyColumn) 

Dim Row As Long 
For Row = StartRow To MaxRows 

    MyDictionary.Item(Cells(Row, KeyColumn)) = Cells(Row, ValueColumn) 

Next Row 

Set CreateDictionaryBySheet = MyDictionary 

End Function 

は、私は私のコードをチェックするために、このループを書いた:

Sub Test() 

Dim Key As Variant 
Dim MyDictionary As Object 
Set MyDictionary = CreateDictionaryBySheet("Config") 

For Each Key In MyDictionary 

MsgBox (Key & " => " & MyDictionary(Key)) 

Next Key 

End Sub 

細胞(2,1)と細胞(3,1)の両方が、 "" および細胞であると仮定すると、(2,2) = 1とセル(3,2)= 2私は2つのmsgboxを見るでしょう: "a => 1"と "a => 2"を持つもの

これは私がちょうど1つのmsgboxつまり "a => 2"

ありがとうございました! ピーター

答えて

0

ああ、私はだけではなく、セルの値にrefferingとき、私は仮定の動作を取得することを考え出し:

これは、重複値を許可します:

MyDictionary.Item(Cells(Row, KeyColumn)) = Cells(Row, ValueColumn) 

これはない:

MyDictionary.Item(Cells(Row, KeyColumn).Value) = Cells(Row, ValueColumn).Value 

dictinaryは意図していない最初のケースでキーとしてCells-Objectを取ったためです。