5

辞書オブジェクト項目に関連する回避策を探しています

Dim a, d 'Create some variables

 Set d = CreateObject("Scripting.Dictionary")

 d.Add "a", "Athens" 'is possible I know 

 d.Add "a", "Athens","India","Paris" ' Is this Possible  under same Key?

説明のスナップショット:( UPDATED )

  Manger ID            EMPID      EMPID     EMPID     EMPID ......

     11                12          10
     15                10 
     20                22          45        46
     40

辞書オブジェクトを使用して上記の表をどのように実装できますか? アイデアをください。

ありがとう、

4

4 に答える 4

4

EDIT:変数名をよりOPフレンドリーにします

編集:OPの読書のためのScripting.Dictionary参照を含めます

Sub t()
    Dim d
    Dim a
    a = Array("Athens", "India", "Paris")
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "a", a
    MsgBox Join(d.Item("a"), ",")
End Sub

編集:OPの質問のように値を辞書に読み込み、値を取得する

Sub t()
    Dim d As Object
    Dim values
    Dim height As Long
    Dim item
    Dim width As Long
    Dim i As Long, j As Long
    Dim MANGERID
    Dim EMPIDs
    Dim EMPID
    With ActiveSheet
        height = .Cells(.Rows.Count, 1).End(xlUp).Row
        If height < 2 Then
            Exit Sub
        End If
        Set d = CreateObject("Scripting.Dictionary")
        For i = 2 To height
            width = .Cells(i, .Columns.Count).End(xlToLeft).Column
            if width > 1 then  'make sure have EMPID
                ReDim values(1 To width - 1)
                Key = .Cells(i, 1).Value
                For j = 2 To width
                    values(j - 1) = .Cells(i, j).Value
                Next j
                d.Add Key, values
            end if
        Next i

        'displaying back the items in the dictionary
        For Each MANGERID In d.keys
            'value array
            EMPIDs = d.item(MANGERID)
            If TypeName(EMPIDs) = "Variant()" Then
                For Each EMPID In EMPIDs
                    Debug.Print MANGERID & ":" & EMPID
                Next EMPID
            End If
        Next MANGERID

        Set d = Nothing
    End With
End Sub
于 2012-12-19T08:35:34.760 に答える
1

いいえ。定義上、ディクショナリデータ型は一意である必要があるキーを使用します。ほとんどの実装でこのようになっていることは知っていますが、VBscriptの信頼できるリファレンスとして最も近いのScripting.Dictionaryは、このTechNetの宣伝文句です。

キーは一意のエントリです。1つのDictionaryオブジェクト内の2つのキーを同じにすることはできません。

于 2012-12-19T07:56:28.797 に答える
0

これを見て、このソリューションへの別のアプローチが必要な他の人のための別の例を次に示します。これは役に立ちそうな気がします。

Dim objDictionary
Set objDictionary = CreateObject("Scripting.Dictionary")
    dicKey = 69
    dicValues = ""
    dicVal = "val1"
    dicVal2 = "val2"
    dicVal3 = "val3"
    objDictionary.add dicKey, DicValues1 & DicValues2
    chang = -1

if chang = -1 then  
    objDictionary.item(dicKey) = dicVal & "," & dicVal2
    chang = -69
end if

if chang = -69 then
    objDictionary.item(dicKey) = dicVal3 & ", " & dicVal & ", " & dicVal2
    chang = -1
end if

for each objDictionary_key in objDictionary.keys
    msgbox "Key: " & objDictionary_Key & " Value: " & objDictionary.item(objDictionary_Key)
next 

これがいくらか役立つことを願っています!

于 2016-06-02T16:33:19.707 に答える
0

1 つのキーに複数の項目を追加しようとすると、キーが重複し、Vb スクリプトでは許可されません。ディクショナリ オブジェクトの詳細については、次のリンクを参照してください。 Dictionary オブジェクトの使用方法

于 2019-02-09T17:55:33.160 に答える