配列はとても便利ですが、たまに使おうとすると忘れてしまうことがあります。
そんなときのために、本記事では配列の使い方・配列に関する関数についてまとめます。
配列の宣言
配列の宣言には、要素数を固定して宣言する方法と、要素数を可変にして宣言する方法があります。
- 要素数固定:Dim 配列名(要素番号) As データ型
- 要素数固定:Dim 配列名(要素番号 to 要素番号) As データ型
- 要素数可変:Dim 配列名() As データ型
配列に入れるデータ数が決まっている場合は、aのように配列名の括弧に数値を入れて配列を宣言します。
何も指定しない場合、配列は0から始まります。開始の要素番号を指定したい場合にはbのように要素番号 to 要素番号としましょう。
しかし、毎回データ数が違うような処理をする場合には、配列を動的にする必要があります。その場合には、cのように配列名のあとの括弧には何もいれずに配列を宣言します。
copy
Dim arrayString(3) As String
Dim arrayLong(1 To 5) As Long
Dim arrayVariant() As Variant
配列の要素数を変更
配列の要素数を変更したい場合には、Redimを使用します。
- Redim 配列名(変更後の要素数)
- Redim Preserve 配列名(変更後の要素数)
Redimにて配列の要素数を変更する場合には、配列を要素数可変で宣言している必要があります。
また、配列の要素数を変更する場合、Redimだけで要素数を変更すると配列の中身は消えてしまいます。中身を残しつつ配列の要素を変更したい場合には、Redim Preserveを使用します。
Redim Preserveを使う場面ですが、例えばA列のデータが可変であり配列の要素数を決められない場合などに使います。
copy
Dim sheet As Worksheet
Dim arrayCellValue() As String
Dim maxRowNo As Long
Set sheet = ActiveSheet
maxRowNo = sheet.Range("A1").End(xlDown).Row
For i = 1 To maxRowNo
ReDim Preserve arrayCellValue(i)
arrayCellValue(i) = sheet.Cells(i, 1).Value
Next
配列の初期化
配列を初期化したい場合はEraseを使用します。
Erase 配列名
Eraseを使用すると、配列の要素数を宣言したときに戻します。また、配列の要素の中身を全て空(数値型の場合0)にします。
気を付けたいところとしては、配列の要素数を宣言したときに戻すということ。そのためRedimを使用している場合には、要素数がゼロとなってしまうことがあるので注意してください。
配列の要素数を取得
配列の要素数分ループ処理をしたいような場合にUbound、Lboundを使います。
- 上限取得:Ubound(配列名)
- 下限取得:Lbound(配列名)
Join関数で配列を文字列に変換
文字列型の配列を文字列に変換したいときには、Join関数を使います。
- Join(文字列の配列)
- Join(文字列の配列, 連結部分に使いたい文字)
文字列型以外の配列を引数に設定するとエラーになるので注意が必要です。
第2引数を省略した場合、配列の要素が半角スペースを挟んで結合されて文字列に変換されます。CSV出力時に使用する場合には、第2引数に”,”を設定を設定するとよいでしょう。
copy
Public Sub UseJoin()
Dim sheet As Worksheet
Set sheet = ActiveSheet
Dim arrayStr(3) As String
arrayStr(0) = "a"
arrayStr(1) = "b"
arrayStr(2) = "c"
arrayStr(3) = "d"
sheet.Cells(1, 1).Value = Join(arrayStr)
sheet.Cells(2, 1).Value = Join(arrayStr, ",")
End Sub
Split関数で文字列を配列に変換
その他、Split関数で区切った要素を配列に入れることができます。CSVファイルを読み込んでカンマ区切りで処理を行いたいときなどに利用できます。
実際に使っているサンプルを見たい方は以下の記事をご覧ください。
