2016-05-08 12 views
0

は、私は次の問題で混乱しています:VBA配列(のReDim保護区&インデックス)VBAの初心者として

Dim DynArray() As Double 
ReDim DynArray(0 To 0) 
DynArray(0) = 100 
ReDim Preserve DynArray(5 To 5) 'subscript out of range 
DynArray(5) = 100 

それが動作しない理由は?元の配列の値を保持しながらVBAで配列の上限と下限を変更する方法は? ありがとうございます。

+1

なぜあなたのタイトルはC++と言うのですか?その質問はすべてvbaに関するものですか? –

+0

タイプが間違っています....しかし、送信後に変更する方法を知らない... – angelbj55

+0

ありがとうございました! – angelbj55

答えて

2

The documentation

あなたが保存、あなただけの上限を変更すること ことで、配列のサイズを変更することができます使用する場合と述べています。下限を変更するとエラーが発生します。

意味:あなただけ

ReDim Preserve DynArray(0 To 5) 
+0

良い短い答え。私はいくつかの詳細を追加するために別の答えを追加しました。 –

+0

ありがとうございました!役に立った – angelbj55

+0

左の矢印をクリックすると役立つ回答がすべて表示されます。さらに、あなたの質問に答えた答えを、受け入れられた答えとして最もよくマークすることができます。この答えがあなたの問題を解決したことを他の読者に伝えます。それはまた、*評判*を回答者に提供します。 StackOverflowの評判とその仕組みについて詳しく知りたい場合はhttps://stackoverflow.com/help/whats-reputationを読んでください。 – Leviathan

0

上記の答えが正しいかを行うことができますが、私はちょうどいくつかの詳細を追加したいです。あなたはキーワードを保存使用している場合

は、あなたがは、最後の配列 の次元のサイズを変更することができますし、すべてので次元の数を変更することはできません。 の例では、配列に次元が1つしかない場合は、 次元が最後の次元であるためサイズを変更できます。ただし、 配列に2つ以上のディメンションがある場合は、最後のディメンションの のサイズのみを変更しても、配列の内容は保持されます。 次の例は、アレイに含まれる既存のデータ を消去せずに、ダイナミックアレイの最後の ディメンションのサイズを増やす方法を示しています。 documentationから

この例では、動的配列変数のためのストレージスペースを割り当て、再割り当てするReDimステートメントを使用しています。オプションベースが1であると仮定します。

Dim MyArray() As Integer ' Declare dynamic array. 
Redim MyArray(5) ' Allocate 5 elements. 
For I = 1 To 5 ' Loop 5 times. 
MyArray(I) = I ' Initialize array. 
Next I 

次のステートメントは、配列のサイズを変更して要素を消去します。

Redim MyArray(10) ' Resize to 10 elements. 
For I = 1 To 10 ' Loop 10 times. 
MyArray(I) = I ' Initialize array. 
Next I 

次の文は、配列のサイズを変更しますが、要素は削除しません。

    Redim Preserve MyArray(15) ' Resize to 15 elements. 

あなたの間違いの例:ReDim Preserve DynArray(5 To 5)下限を変更した場所。

関連する問題