2017-09-07 6 views
0

多次元配列とRedim Preserveという別のトピックがあります。私はそれらの多くを読んだが、なぜ私のコードが動作していないのか理解できない。Redim Preserve(2D配列)の問題

私はあなたが最後の次元だけを拡張することができ、それが私が望むものだと思っています:私の2D配列に新しい列を追加してください。これは私にエラーを与える

Sub test_Redim_Preserve() 

Dim arr() As Variant 

ReDim arr(10, 10) 
ReDim Preserve arr(UBound(arr,1), UBound(arr,2) + 1) 

End Sub 

この作品の罰金

Sub test_Redim_Preserve2() 

Dim arr() As Variant 

ReDim arr(10, 10) 
arr = Range("A1:J10") 
ReDim Preserve arr(UBound(arr,1), UBound(arr,2) + 1) 

End Sub 

:問題を特定するために

は、私は2のコードをテストします。 私は配列を設定する範囲を与えた後、Redimできません。私はそれがRedimを受け入れるために欠けているものを理解していません。

誰かが私を説明できますか?

答えて

2

デフォルトの下限は、逆のOption Baseステートメントがない場合は0ですが、配列に範囲を割り当てます。常に下限が1です。したがって、実際にはコードのサイズを変更しようとしています。その下限を変更することによって、配列の第1次元も変更します。用途:

ReDim Preserve arr(1 To UBound(arr, 1), 1 To UBound(arr, 2) + 1) 
+0

[OK]を私は今理解しています。私は私の範囲の最初の値がarr(0,0)に行くと思っていたが、代わりにarr(1,1)に行く。あなたの説明と解決に感謝します。 –

2

あなたはあなたのコードの先頭にOption Base 1を使用することができ、その後、元のコードが正常に動作します。

全コード

Option Base 1 

Sub test_Redim_Preserve2() 

Dim arr() As Variant 

ReDim arr(10, 10) 
arr = Range("A1:J10") 
ReDim Preserve arr(UBound(arr, 1), UBound(arr, 2) + 1) 

End Sub 
+0

あなたのソリューションもありがとう。 –