カテゴリー
Microsoft

【Excel VBA】2次元配列から1次元目の要素 (配列) を取り出すことはできません><

ポイント

  • 2次元配列から1次元目の要素 (配列) を取り出すことはできない。
  • Variant を使用して、擬似的なジャグ配列を作成すれば可能
  • 多次元配列とジャグ配列は異なり、同様に扱うことができない。
  • 例えば、Range にジャグ配列を代入しても、シートにジャグ配列の要素は反映されない。

具体例

Option Explicit

Public Sub Test()
    ' 2次元配列
    Dim strArray(2, 2) As String
    strArray(0, 0) = "縦1横1"
    strArray(0, 1) = "縦1横2"
    strArray(0, 2) = "縦1横3"
    strArray(1, 0) = "縦2横1"
    strArray(1, 1) = "縦2横2"
    strArray(1, 2) = "縦2横3"
    strArray(2, 0) = "縦3横1"
    strArray(2, 1) = "縦3横2"
    strArray(2, 2) = "縦3横3"

    ' 配列から取り出す
    ' これはOK
    Debug.Print strArray(0, 0)
    ' これらはエラー → [配列の次元が一致していません。]
    Dim v1 As Variant
'    v1 = strArray(0)
'    Debug.Print strArray(0)(0)

    ' シートへ配列を反映する
    ' これはOK。シートに値は反映される。
    Range("A1:C3") = strArray


    ' 擬似ジャグ配列
    Dim jagArray As Variant
    jagArray = Array(Array("a1", "b1", "c1"), Array("a2", "b2", "c2"), Array("a3", "b3", "c3"))

    ' 配列から取り出す。
    ' これはOK
    Dim w As Variant
    w = jagArray(0)
    Debug.Print jagArray(0)(0)
    ' これはエラー → [インデックスが有効範囲にありません。]
'    Debug.print jagArray(0, 0)

    ' シートへ配列を反映する。
    ' エラーにはならないが、シートに値は反映されない。
    Range("A1:C3") = jagArray
End Sub

おわりに

配列から1次元目を取り出して関数の引数に割当、、、とやろうとしたところいつまでたってもできませんでした><。

なぜかしら?と随分と悩みました。。。

他のプログラム言語を触っていて、ジャグ配列というものを意識したことがありませんでした。そもそも、配列は固定長でサイズを管理しなければなりません。少しでも制御する要素を減らしたいと思って大抵はリストなどのコレクションを使用しておりました。

ですので、こんなにも悩むことになったのだと存じます。

今回することができて、そしてまとめることができて、嬉しく思います♪

最後に、参考ページです♪ありがとうございました!

コメントを残す