同じデータ型の複数の値を一つの変数名でまとめて管理する仕組みです。たとえば、5人分の得点をそれぞれ別の変数に格納するよりも、配列を使うことで簡潔に処理できるようになります。プログラムの効率化やコードの簡素化には欠かせない機能です。
■ 配列とは何か?
配列とは、複数のデータを連続して格納するための変数です。各データ(要素)はインデックス(添え字)で区別されます。インデックスは通常 0 または 1 から始まり、順番に割り当てられます。
例(5人の得点を配列で格納):
Dim scores(1 To 5) As Integer
scores(1) = 80
scores(2) = 75
scores(3) = 90
scores(4) = 65
scores(5) = 100
■ 配列の基本的な使い方
宣言方法(固定長配列)
Dim 配列名(最小インデックス To 最大インデックス) As データ型
例:
Dim names(1 To 3) As String
これは3つの文字列要素を持つ配列 names
を作ります。初期化しなくても、デフォルト値(空文字列など)が入っています。
宣言方法(インデックス省略時)
Dim scores(5) As Integer ' インデックスは0~5(6個)
VBAでは、Option Base 1
を使用しない限り、インデックスは0から始まります。
■ 配列の種類
1. 固定長配列
サイズがあらかじめ決まっている配列。
Dim items(1 To 10) As String
2. 可変長配列(動的配列)
プログラムの途中で配列のサイズを決定・変更できる配列です。
宣言:
Dim data() As Integer
サイズを設定する:
ReDim data(1 To 5)
サイズを変更する(データ保持したまま):
ReDim Preserve data(1 To 10)
Preserve
を付けないと、既存のデータはすべて失われます。Preserve
は最終インデックスだけ変更可能で、途中のインデックスは変更できません。
■ 多次元配列
複数の次元を持つ配列。表やマトリクス(行列)などに適しています。
例:2次元配列
Dim table(1 To 3, 1 To 2) As String
table(1, 1) = "田中"
table(1, 2) = "営業部"
table(2, 1) = "佐藤"
table(2, 2) = "経理部"
table(3, 1) = "鈴木"
table(3, 2) = "開発部"
■ 配列のループ処理
配列の中身を処理するにはループ(For
文など)を使います。
Dim i As Integer
Dim scores(1 To 5) As Integer
For i = 1 To 5
scores(i) = i * 10
Next i
■ 配列の上限・下限を調べる
LBound
(ローバウンド)と UBound
(アッパーバウンド)関数を使うことで、配列の範囲を取得できます。
Dim arr(2 To 6) As String
MsgBox LBound(arr) ' 2
MsgBox UBound(arr) ' 6
■ 配列を使った応用例
合計・平均を求める例:
Sub ScoreAverage()
Dim scores(1 To 5) As Integer
Dim i As Integer, sum As Integer
scores(1) = 80
scores(2) = 75
scores(3) = 90
scores(4) = 60
scores(5) = 85
For i = 1 To 5
sum = sum + scores(i)
Next i
MsgBox "平均点:" & sum / 5
End Sub
■ 配列とVariant型
配列は Variant
型でも扱うことができます。たとえば、セル範囲から一括でデータを取得する際に便利です。
Dim myArray As Variant
myArray = Range("A1:C5").Value
この場合、myArray
は2次元配列になります(行、列の順)。
■ Split関数による文字列配列
文字列を特定の区切り文字で分割し、配列として扱うこともできます。
Dim parts() As String
parts = Split("りんご,バナナ,みかん", ",")
MsgBox parts(1) ' 結果:バナナ
■ 配列の注意点
- 配列のインデックスミス(0と1の違い)に注意。
ReDim Preserve
の多用はパフォーマンスに悪影響。- 配列を使う場合は
Option Base
の設定にも注意(通常は0開始)。
■ まとめ
VBAの配列は、大量の同種データを一括管理し、効率的な処理を実現するための必須ツールです。
- 固定長/可変長配列を使い分ける
- 配列はインデックスで操作
- ループや関数(
UBound
など)と組み合わせて使う - 多次元配列や文字列の分割にも対応