2011-08-04 7 views
8
私たちは、あなたが同じように多次元配列を事前に定義することができますどのように

前はエクセルVBAで、多次元配列を定義

GroupCols = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L") 

次使用してExcel VBAで1次元配列を定義することができます知っている

はまた、私は次のよう

Level[16][0] 
Level[16][1] 
Level[16][2] 

Level[8][0] 
Level[8][1] 
Level[8][2] 

Level[7][0] 
Level[7][1] 
Level[7][2] 

最初のインデックスがレベル​​を定義で特定のレベルを追跡するので、連続でなくてもよい...等16の後ようにストレート8とがあります。それぞれ私は0,1,2秒のインデックスである3つの情報が必要です。

誰もがVBAで同じことを達成する方法について私を導くことはできますか?

答えて

9

あなたはそのような配列に非連続的なインデックスを持つことができません。不連続なインデックスのサブセットのみを使用すると、他のすべての要素は空になりますが、ストレージスペースを使い果たしてしまい、非効率的でエラーが発生しやすくなります(LaunchMissile = Levels(17,1)、whoops!)。

あなたが探しているのは辞書オブジェクトです。使用する前に、参照を次のように設定する必要があります。ツール>参照> Microsoft Scripting Runtimeを確認します。

例:コレクションオブジェクトにもトリックを行うことができることを

Dim Levels As Scripting.Dictionary 
Set Levels = New Scripting.Dictionary 

' Fill up the dictionary 
Levels.Add Key:=16, Item:=Array("A", "B", "C") 
Levels.Add Key:=8, Item:=Array("FAI", "CNT", "YES") 
Levels.Add Key:=7, Item:=Array("Once", "Twice", "Thrice") 

' Retrieve items from the dictionary 
Debug.Print Levels.Item(8)(0) 
Debug.Print Levels.Item(8)(1) 
Debug.Print Levels.Item(8)(2) 

注意。利点:VBAにネイティブなので、参照を設定する必要はありません。欠点:キーは書き込み専用であり、非常に扱いにくいことがあります。

0

array()関数を使用するときのように、2次元配列を宣言して設定する方法はありません。 ReDimを使用して配列ディメンションを定義し、それを設定することができます。ここでは例です:あなたは、配列を作成するときに残念なことに、要素は下限から上限までエントリごとに作成されます

ReDim myArray(0 To 16, 0 To 3) 
myArray(0, 0) = "A" 
myArray(0, 1) = "B" 
... 

。彼らは空になりますが、彼らはそこにいるので、特にあなたがそれをループすることを計画しているなら、あなたはそれを知る必要があります。

3

たとえば、Array(Array())を使用できます。

data = Array(Array(1,2), Array(3,4)) 

data(0)(0)

from hereコピー)を使用し、最初の要素を指すために

+0

なぜ2次元配列の代わりにこれを行うのですか?これは過度に巻き込まれているようですが、理由があるかもしれません... –

+0

場合によっては、ほとんど空の行列を避けることができます。 –

+0

どのように?配列 'data(i)(j)'の配列に、等価な2次元配列 'data2D(i、j)'と同じ総数がどのように含まれないのでしょうか? –

8

(評価使用して2次元配列を定義する方法は、ほぼ1次元アレイを()を使用してのような)があります:

Sub Array2DWithEvaluate() 

Dim Array2D As Variant 

'[] ist a shorthand for evaluate() 
'Arrays defined with evaluate start at 1 not 0 

Array2D = [{"1,1","1,2","1,3";"2,1","2,2","2,3"}] 

Debug.Print Array2D(2, 2) '=> 2,2 

End Sub 

あなたがそれを使用する必要があり、配列を定義するための文字列を使用したい場合このような

Sub Array2DWithEvaluateFromString() 

Dim strValues As String 
Dim Array2D As Variant 

strValues = "{""1,1"",""1,2"",""1,3"";""2,1"",""2,2"",""2,3""}" 

Array2D = Evaluate(strValues) 

Debug.Print Array2D(2, 2) '=> 2,2 

End Sub 

評価関数の他の用途についての詳しい情報が必要な場合は、この素晴らしい投稿をチェックしてください。