Excel VBA では、オブジェクトを 配列 に格納して管理することができます。特に ワークシートやセル範囲、カスタムクラスのオブジェクトを配列として管理する と、処理の効率化やコードの可読性向上に役立ちます。
この記事では、オブジェクト配列の基本的な使い方 から 応用例 まで詳しく解説します。
目次
オブジェクト配列とは?
オブジェクト配列 とは、VBA のオブジェクトを 配列に格納 して、複数のオブジェクトを一括で処理するための手法です。
通常の変数の配列と同様に、オブジェクトも配列に格納できます。
オブジェクト配列の基本的な使い方
① ワークシートをオブジェクト配列に格納
ワークシートをオブジェクト配列に格納し、複数のシートをまとめて処理する例です。
コード例: ワークシートのオブジェクト配列
Sub WorksheetObjectArray()
Dim wsArray(1 To 3) As Worksheet
' 各ワークシートを配列に格納
Set wsArray(1) = ThisWorkbook.Sheets("Sheet1")
Set wsArray(2) = ThisWorkbook.Sheets("Sheet2")
Set wsArray(3) = ThisWorkbook.Sheets("Sheet3")
' すべてのシートの A1 セルを変更
Dim i As Integer
For i = 1 To 3
wsArray(i).Range("A1").Value = "Updated"
Next i
End Sub
ポイント
✅ Dim wsArray(1 To 3) As Worksheet
で ワークシートのオブジェクト配列を宣言
✅ Set wsArray(i) = ThisWorkbook.Sheets("SheetX")
で オブジェクトを代入
✅ ループ処理で一括変更 できるので、コードが簡潔になる
② Range(セル範囲)をオブジェクト配列に格納
特定のセル範囲をオブジェクト配列に格納し、まとめてデータを処理する方法です。
コード例: セル範囲のオブジェクト配列
Sub RangeObjectArray()
Dim rngArray(1 To 3) As Range
' セル範囲をオブジェクト配列に格納
Set rngArray(1) = ThisWorkbook.Sheets("Sheet1").Range("A1:A10")
Set rngArray(2) = ThisWorkbook.Sheets("Sheet2").Range("B1:B10")
Set rngArray(3) = ThisWorkbook.Sheets("Sheet3").Range("C1:C10")
' すべての範囲の背景色を変更
Dim i As Integer
For i = 1 To 3
rngArray(i).Interior.Color = RGB(255, 255, 0) ' 黄色に設定
Next i
End Sub
メリット
✅ Range
を配列に格納することで 異なるシートや範囲を一括操作
✅ Interior.Color
のようなプロパティを統一的に変更できる
【VBA】特定の文字を含む行の処理:検索・削除・別シートにコピー
VBA では、動的配列 を使用して、オブジェクトの数が事前に分からない場合でも柔軟に対応できます。
③ ReDim を使用してオブジェクト配列を動的に設定
以下の例では、ワークブック内のすべてのシートをオブジェクト配列に格納し、一括で処理を行います。
コード例: ReDim を使用した動的オブジェクト配列
Sub DynamicWorksheetArray()
Dim wsArray() As Worksheet
Dim i As Integer, sheetCount As Integer
' シート数を取得
sheetCount = ThisWorkbook.Sheets.Count
' 配列のサイズをシート数に設定
ReDim wsArray(1 To sheetCount)
' 各ワークシートを配列に格納
For i = 1 To sheetCount
Set wsArray(i) = ThisWorkbook.Sheets(i)
Next i
' すべてのシートの A1 セルを変更
For i = 1 To sheetCount
wsArray(i).Range("A1").Value = "Updated"
Next i
End Sub
ポイント
✅ ReDim wsArray(1 To sheetCount)
で シート数に応じて配列のサイズを変更
✅ すべてのシートを配列に格納し、一括で処理を行う
Collection
を使用すると、オブジェクトの追加や削除を柔軟に行えます。
④ Collection を使ったオブジェクト配列
Sub CollectionWorksheetArray()
Dim wsCollection As New Collection
Dim ws As Worksheet
' シートをコレクションに追加
For Each ws In ThisWorkbook.Sheets
wsCollection.Add ws
Next ws
' コレクションをループして A1 セルを更新
Dim i As Integer
For i = 1 To wsCollection.Count
wsCollection(i).Range("A1").Value = "Updated"
Next i
End Sub
メリット
✅ Collection.Add
を使うと 動的にオブジェクトを追加できる
✅ 配列と違い、Collection.Remove
を使えば 要素の削除も可能
クラスモジュールを使用すると、カスタムオブジェクトをオブジェクト配列に格納できます。
⑤ カスタムクラス Person のオブジェクト配列
- クラスモジュール(
Person
)を作成し、以下を記述Option ExplicitPrivate pName As String
Private pAge As Integer' プロパティ: 名前
Public Property Get Name() As String
Name = pName
End PropertyPublic Property Let Name(value As String)
pName = value
End Property' プロパティ: 年齢
Public Property Get Age() As Integer
Age = pAge
End PropertyPublic Property Let Age(value As Integer)
pAge = value
End Property - 標準モジュールにオブジェクト配列を利用するコード
Sub ObjectArrayWithClass()
Dim people(1 To 3) As Person
Dim i As Integer
' 各オブジェクトを作成
For i = 1 To 3
Set people(i) = New Person
people(i).Name = "名前" & i
people(i).Age = 20 + i
Next i
' オブジェクト配列をループ
For i = 1 To 3
MsgBox "名前: " & people(i).Name & vbCrLf & "年齢: " & people(i).Age
Next i
End Sub
ポイント
✅ クラスを使用すると、カスタムオブジェクトを配列で管理可能
✅ 複雑なデータ構造の処理が容易に
まとめ
オブジェクト配列の活用ポイント
✅ Worksheet
、Range
、カスタムクラスなどのオブジェクトを配列化
✅ ReDim
を使えば 可変長のオブジェクト配列 を作成可能
✅ Collection
を使えば 動的にオブジェクトを追加・削除 できる
オブジェクト配列を活用することで、コードの可読性・効率性が大幅に向上 します。