[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関数について

こちらをご参照下さい。

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

  1. Pingback: [VBA]多次元配列のRedimは最終次元しか変更できない | エンジニ屋

  2. 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.

  3. 匿名 on 2017/01/29 at 1:21 PM said:

    エンジニ屋さん

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

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

    Tagen

コメントを残す

Post Navigation