[VBA]2次元配列の1次元目をRedim Preserveする

超まとめ

多次元配列のRedimは最終次元しか変更できないのですが、二次元配列に限っては、比較的簡単に一次元目の長さを変更することができます。

この「RedimPreserve2D」関数で、2次元配列の1次元目の長さを変更できます。Excelではなかなか有用なのではないでしょうか。

'2次元配列の1次元目の長さを変更する関数
'orgArray … 二次元配列
'legthTo … 1次元目の長さ
Function RedimPreserve2D(ByVal orgArray, ByVal lengthTo)
    Dim transedArray()
    transedArray = WorksheetFunction.Transpose(orgArray)
    ReDim Preserve transedArray(1 To UBound(transedArray, 1), 1 To lengthTo)
    RedimPreserve2D = WorksheetFunction.Transpose(transedArray)
End Function

'使い方
Sub test()
   Dim baseArray()
   ReDim baseArray(1 To 3, 1 To 2)     '開始インデックスは1にしておいたほうがよいです。
   
   'baseArrayの1次元目の長さを10に変更する
   baseArray = RedimPreserve2D(baseArray, 10)
End Sub

注意点

Transposeを使用している関係で、処理後の配列の開始インデックスは「1」になります。
(Option Base 1 を指定してしまうのがいいかも)

Transpose関数について

こちらをご参照下さい。

9 Replies to “[VBA]2次元配列の1次元目をRedim Preserveする”

  1. Hey! Someone in my Myspace group shared this site with us so I
    came to check it out. I’m definitely loving the information. I’m bookmarking and will be tweeting this to
    my followers! Outstanding blog and wonderful design.

  2. エンジニ屋さん

    1次元目をRedim Preserve、助かりました!!!!

    Transposeの着想、感服いたしております。

    Tagen

  3. VBAで2次元配列を動的に増やしたかったので大変助かりました。素晴らしいです!!ありがとうございました。

  4. このプログラムなかなか有用じゃなくて”かなり”有用でした。
    しがない事務屋ですが感服…(やはり本職は違う)

コメントを残す