VBAで自動化 VBA一覧 オブジェクト変数

【VBA】オブジェクト配列の基本と活用方法

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")オブジェクトを代入
ループ処理で一括変更 できるので、コードが簡潔になる

【VBA】セルの値を変数配列に取得:ループ処理

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】オブジェクトのプロパティ一覧と活用方法

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)シート数に応じて配列のサイズを変更
✅ すべてのシートを配列に格納し、一括で処理を行う

【VBA】範囲指定のセルの値:配列を変数に格納

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 のオブジェクト配列

  1. クラスモジュール(Person)を作成し、以下を記述 
    Option Explicit

    Private pName As String
    Private pAge As Integer

    ' プロパティ: 名前
    Public Property Get Name() As String
    Name = pName
    End Property

    Public Property Let Name(value As String)
    pName = value
    End Property

    ' プロパティ: 年齢
    Public Property Get Age() As Integer
    Age = pAge
    End Property

    Public Property Let Age(value As Integer)
    pAge = value
    End Property

  2. 標準モジュールにオブジェクト配列を利用するコード

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

ポイント

✅ クラスを使用すると、カスタムオブジェクトを配列で管理可能
複雑なデータ構造の処理が容易に

まとめ

オブジェクト配列の活用ポイント

WorksheetRange、カスタムクラスなどのオブジェクトを配列化
ReDim を使えば 可変長のオブジェクト配列 を作成可能
Collection を使えば 動的にオブジェクトを追加・削除 できる

オブジェクト配列を活用することで、コードの可読性・効率性が大幅に向上 します。

-VBAで自動化, VBA一覧, オブジェクト変数