配列の要素を取り出す関数について

スポンサーリンク

配列の要素を取り出す専用の関数がある

以前から配列の値を取り出すのに良い方法が思いつかなかったので、結構力技で実施していたのですが、配列を取り出すのに便利な関数があることを知ってショックを受けました。

今回は配列の要素を取り出す際に役立つJoin関数とUBound関数をご紹介します。

関数を使わず配列の要素を取り出すサンプルコード

これまで私が配列を取り出す際に使用していたコードは以下のようなものになります。

ExcelでA列のセルの値を配列に格納し、その配列の要素を取り出すサンプルコードです。
配列の要素数は可変を想定してコードを作成しています。

Sub 配列の要素取り出し()

Dim hairetsu()
Dim i As Long, k As Long
k = 0
i = 0
Do Until Cells(i + 1, 1) = “”
ReDim Preserve hairetsu(i)
hairetsu(i) = Cells(i + 1, 1)
k = k + 1
i = i + 1
Loop

Dim mojiretsu
mojiretsu = hairetsu(0)
For i = 1 To k – 1
mojiretsu = mojiretsu & “,” & hairetsu(i)
Next i
MsgBox mojiretsu

End Sub

要素数を調べるために変数kを宣言し、iと同じ数になるようにして呼び出す際に使用しています。

このコードはきちんと動作するのですが、以下2点の手間・問題点がありました。

  • ①要素数で繰り返し処理をする際、変数kに最後に余分に追加された1を減らすのがややこしくて面倒
  • ②変数を文字列にする際に間に入れる文字(今回は”,”)は要素数-1の数を繰り返して挿入するため、配列の1つめかもしくは最終だけは繰り返しの中で処理できない
  • これらの問題点はUBound関数やJoin関数を使えばきちんと解決できます。

    スポンサーリンク

    UBound関数を使用した場合のサンプルコード

    Ubound関数は配列の要素数を返す関数です。
    (配列のインデックス番号を返すので厳密には要素数-1となります。)

    この関数を知って、これまで私が要素数の確認のためにわざわざ宣言して使用していた変数kが必要ないことがわかりました。
    Ubound関数を使用すると要素を文字列にするのが少し簡略化されます。

    Sub 配列の要素取り出しUBound関数使用()

    Dim hairetsu()
    Dim i As Long
    i = 0
    Do Until Cells(i + 1, 1) = “”
    ReDim Preserve hairetsu(i)
    hairetsu(i) = Cells(i + 1, 1)
    i = i + 1
    Loop

    Dim mojiretsu
    mojiretsu = hairetsu(0)
    For i = 1 To UBound(hairetsu)
    mojiretsu = mojiretsu & “,” & hairetsu(i)
    Next i
    MsgBox mojiretsu

    End Sub

    Join関数を使用した場合のサンプルコード

    Join関数は配列の要素を文字列の一覧として取り出す関数です。
    Join(“配列名”,”区切りに使用する文字列”)の形式で要素を文字列に変換して並べることが可能です。

    区切りの文字を”
    ”やVbCr、VbCrLfにすることで改行コードを間にはさむことも可能です。

    細かい部分の融通は利きにくいかもしれませんが、簡単に間に文字列を挟み込むことができるので使用しやすいです。

    Sub 配列の要素取り出しJoin関数使用()

    Dim hairetsu()
    Dim i As Long, k As Long
    i = 0
    Do Until Cells(i + 1, 1) = “”
    ReDim Preserve hairetsu(i)
    hairetsu(i) = Cells(i + 1, 1)
    i = i + 1
    Loop

    Dim mojiretsu
    mojiretsu = Join(hairetsu, “,”)
    MsgBox mojiretsu

    End Sub

    コメント