2017-05-29 13 views
0

値のペアが2行ずつ表示されるように、VBAで配列を定義して書き込む方法はありますか?side-by-side値を持つVBA配列

fndList = Array _ 
(_ 
    "PS4", "PlayStation 4" _ 
    "WIN", "Microsoft Windows", _ 
    "SNES", "Super Nintendo Entertainment System" _ 
) 

上記のようなものはありますか? 2つの別々の配列を使用することもうまくいきます。

+1

は、なぜそれをテストしていませんか? '' PlayStation 4 ''の直後にカンマを置くと、上記の内容は完全に有効なVBAになります。あなたの実際のデータは、当然「辞書」に収まるようです。 –

+1

カンマが足りないようです。 'fndList(1 to 3、1 to 2)'配列を作成しようとしていますか? – Jeeped

+0

実際にはカンマが足りないことがありました。ありがとう! – posfan12

答えて

1

あなたが持っているものは(完全な有効なVBAの後にコンマが挿入された後に"PlayStation 4")です。ただし、1次元配列が作成されます。

Function Matrix(m As Long, n As Long, ParamArray items()) As Variant 
    'Creates an mxn matrix where the items() are filled in by row 
    Dim A As Variant 
    Dim i As Long, j As Long 
    ReDim A(1 To m, 1 To n) 
     For i = 1 To m 
      For j = 1 To n 
       A(i, j) = items(n * (i - 1) + j - 1) 
      Next j 
     Next i 
    Matrix = A 
End Function 

のように使用する:あなたは同様の表記は2次元配列を作成したい場合は、カスタム関数を作成することができます

Sub test() 
    Dim fndList As Variant 
    fndList = Matrix _ 
    (3, 2, _ 
     "PS4", "PlayStation 4", _ 
     "WIN", "Microsoft Windows", _ 
     "SNES", "Super Nintendo Entertainment System" _ 
    ) 
    Range("A1:B3").Value = fndList 
End Sub 

作成されたアレイは0-ではなく、ベースの1でありますExcelではVBA 1ベースが範囲との対話のデフォルトであるため、ベースです。明らかに、関数を微調整して返される配列が0になるようにするのは簡単です。

あなたの目標は、あなたがDictionaryを使用することができます"WIN"のようなキーから"Microsoft Windows"のような値を検索する場合は、あなたの実際の問題でもう少し探している:

Sub test2() 
    Dim fndList As Object 
    Set fndList = CreateObject("Scripting.Dictionary") 
    fndList.Add "PS4", "PlayStation 4" 
    fndList.Add "WIN", "Microsoft Windows" 
    fndList.Add "SNES", "Super Nintendo Entertainment System" 
    Debug.Print fndList("WIN") 'prints "Microsoft Windows" 
End Sub 

それは返すようにあなたがMatrix()機能を変更することができそのような辞書。例えば、このような何か:

Function Dict(ParamArray pairs()) As Object 
    'returns a dictionairy where successive pairs of 
    'items in the pairs array are treated as key-value 
    'pairs. It is assumed than an even number of items 
    'are passed 
    Dim D As Object 
    Dim i As Long, n As Long 

    Set D = CreateObject("Scripting.Dictionary") 
    n = (UBound(pairs) - 1)/2 
    For i = 0 To n 
     D.Add pairs(2 * i), pairs(2 * i + 1) 
    Next i 
    Set Dict = D 
End Function 

のように使用することができます。

Sub test3() 
    Dim fndList As Object 
    Set fndList = Dict _ 
    (_ 
     "PS4", "PlayStation 4", _ 
     "WIN", "Microsoft Windows", _ 
     "SNES", "Super Nintendo Entertainment System" _ 
    ) 
    Debug.Print fndList("WIN") 'prints "Microsoft Windows" 
End Sub 
+0

辞書をどのように繰り返しますか? – posfan12

+1

@ posfan12ここで説明するように 'for-each'ループを使うことができます:https://stackoverflow.com/q/1296225/4996248。ループインデックスは変種でなければなりません。これは辞書に関する素晴らしいチュートリアルです:https://excelmacromastery.com/vba-dictionary/。このルートに行きたい場合は、最後の編集で追加した機能が役立つことを願っています。 –

関連する問題