PeaceJetのブログ

金融系の社内エンジニアをやりながら、マーケティングやプランナーなども

多次元配列のサイズを変更する際の注意すべきポイント【ExcelVBA・エクセルマクロ】

ExcelVBAにて、多次元配列のサイズを変更する際に注意すべきポイントをご紹介します。

ポイント

  • 多次元配列のサイズ変更する場合、最後の次元しか変更できません。

ルパン「じげ~ん!」
・・・

ええ、従いまして・・・
以下のプロシージャはエラーになります。

Sub MultiDimensionalArray1()
    Dim MyArray() As Variant
    ReDim MyArray(10, 5)
    ReDim Preserve MyArray(100, 5)
End Sub

f:id:ivclo:20150507215855p:plain

正しいプログラム

最後の次元を変更する場合は、問題ありません。

Sub MultiDimensionalArray2()
    Dim arr() As Variant
    ReDim arr(10, 2)
    ReDim Preserve arr(10, 50)
End Sub

詳細は、公式ドキュメントをご覧ください。

浮き彫りになる障壁

上記の場合、行列の順に物事が運ばないため、
頭を抱えることがあります。

Sub MultiDimensionalArray3()
    
    Dim a(10, 2) As Variant
    
        For i = 0 To 10
        
            a(i, 0) = i & "行0列目"
            a(i, 1) = i & "行1列目"
            a(i, 2) = i & "行2列目"
        
        Debug.Print a(i, 0) & "," & a(i, 1) & "," & a(i, 2)
    
    Next i
    
End Sub

実行結果は以下になりますが・・・。

0行0列目,0行1列目,0行2列目
1行0列目,1行1列目,1行2列目
2行0列目,2行1列目,2行2列目
3行0列目,3行1列目,3行2列目
4行0列目,4行1列目,4行2列目
5行0列目,5行1列目,5行2列目
6行0列目,6行1列目,6行2列目
7行0列目,7行1列目,7行2列目
8行0列目,8行1列目,8行2列目
9行0列目,9行1列目,9行2列目
10行0列目,10行1列目,10行2列目

行を増やすか、列を増やすか・・・

たとえば、動的配列を作成する場合に
行を増やさず、列を増やさないといけない。

続きはこちら → 多次元配列のサイズを変更する際の注意すべきポイント(後編)【ExcelVBA・エクセルマクロ】