あなたが持っているものは(完全な有効な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
は、なぜそれをテストしていませんか? '' PlayStation 4 ''の直後にカンマを置くと、上記の内容は完全に有効なVBAになります。あなたの実際のデータは、当然「辞書」に収まるようです。 –
カンマが足りないようです。 'fndList(1 to 3、1 to 2)'配列を作成しようとしていますか? – Jeeped
実際にはカンマが足りないことがありました。ありがとう! – posfan12