配列の要素を取り出す専用の関数がある
以前から配列の値を取り出すのに良い方法が思いつかなかったので、結構力技で実施していたのですが、配列を取り出すのに便利な関数があることを知ってショックを受けました。
今回は配列の要素を取り出す際に役立つ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
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点の手間・問題点がありました。
これらの問題点は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
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
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
コメント