web-dev-qa-db-ja.com

VBAアレイの動的な寸法決定?

変数に基づいて配列のサイズを設定できないのはなぜですか?これを回避する最善の方法は何ですか?

Dim NumberOfZombies as integer
NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) as New Zombie
22
sooprise

実行時まで含まれる値の数がわからない場合は、動的配列を使用できます。

Dim Zombies() As Integer
ReDim Zombies(NumberOfZombies)

または、プロシージャに対してローカルな配列を作成する場合は、1つのステートメントですべてを実行できます。

ReDim Zombies(NumberOfZombies) As Integer

固定サイズの配列コンパイル時に既知の要素の数が必要です。これが、変数を使用して配列のサイズを設定できない理由です。定義により、変数の値は可変であり、実行時にのみ認識されます。

変数の値が変更されないことがわかっている場合は、定数を使用できます。

Const NumberOfZombies = 2000

しかし、定数と変数の間でキャストする方法はありません。それらは明確に異なる意味を持っています。

42
Cody Gray

配列のサイズを動的に変更するには、ReDimステートメントを使用する必要があります。

Public Sub Test()
    Dim NumberOfZombies As Integer
    NumberOfZombies = 20000
    Dim Zombies() As New Zombie
    ReDim Zombies(NumberOfZombies)

End Sub

配列のサイズがすでにわかっている場合、これは奇妙に思えるかもしれませんが、そこに行きます!

3
Chris Spicer

Collectionオブジェクトの使用について調べることもできます。これは通常、カスタムオブジェクトの配列よりもうまく機能します。

  • 追加
  • カウント
  • 削除する
  • アイテム(インデックス)

さらに、コレクションではfor ... each構造を非常に簡単に使用できるため、通常はコレクションをループするのも簡単です。

2
Fink

定数を使用する必要があります。

CONST NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) As Zombies

または、変数を使用する場合は、次の方法で行う必要があります。

Dim NumberOfZombies As Integer
NumberOfZombies = 20000

Dim Zombies() As Zombies

ReDim Zombies(NumberOfZombies)
1
carny666