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

【VBA】オブジェクト型(Object 型)とは?使い方と注意点

Excel VBA では、変数のデータ型を指定する際に、「オブジェクト型(Object 型)」 を使うことができます。
Object 型を使用すると、ワークブック、ワークシート、セル範囲、グラフ、クラスオブジェクトなど、さまざまなオブジェクトを格納 できます。

本記事では、オブジェクト型の基本的な使い方と、具体的な活用例、注意点について 詳しく解説します。

オブジェクト型(Object 型)とは?

オブジェクト型(Object 型) とは、VBA で ワークシートやセル範囲、クラスモジュールなどのオブジェクトを格納するためのデータ型 です。

通常のデータ型(IntegerString など)とは異なり、オブジェクト型は Excel のオブジェクト(Workbook、Worksheet、Range など)を変数に格納 できます。

【VBA】オブジェクト変数とは?使い方と活用方法

・オブジェクト型の宣言方法

オブジェクト型の変数を使用するには、Dim 文で宣言し、Set ステートメントを使ってオブジェクトを代入 します。

【基本構文】

Dim 変数名 As Object
Set 変数名 = オブジェクト

・オブジェクト型と特定のオブジェクト型の違い

オブジェクト型には 「汎用的なオブジェクト型(Object)」「特定のオブジェクト型(Worksheet、Range など)」 があります。

説明
汎用的なオブジェクト型Dim obj As Objectどの種類のオブジェクトでも格納可能
特定のオブジェクト型Dim ws As Worksheetワークシートオブジェクトのみ格納可能

オブジェクト型の基本的な使い方

汎用オブジェクト型(Object)の使用

Sub UseObjectType()

Dim obj As Object
Set obj = ThisWorkbook.Sheets("Sheet1")

' Object 型の変数を使用してシート名を取得
MsgBox "シート名: " & obj.Name

End Sub

ポイント

Dim obj As Object でオブジェクト型の変数を宣言
Set obj = ThisWorkbook.Sheets("Sheet1") でオブジェクトを代入
obj.Name でシート名を取得(Worksheet 型のプロパティを使用)

特定のオブジェクト型(Worksheet)の使用

Sub UseWorksheetType()

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")

' ワークシートのA1セルに値を入力
ws.Range("A1").Value = "Hello, VBA!"

End Sub

ポイント

Dim ws As Worksheet と特定のオブジェクト型を使用
ws.Range("A1").Value = "Hello, VBA!" でセルの値を設定

特定のオブジェクト型を使用すると、IntelliSense(入力補助機能)が有効になり、プロパティやメソッドをすぐに確認できる ため、プログラミングの効率が向上します。

オブジェクト型の活用例

・Workbook(ワークブック)オブジェクトを操作

異なるブックを開いてデータを操作する例

Sub OpenWorkbook()

Dim obj As Object ' Object 型を使用
Set obj = Workbooks.Open("C:\Users\YourName\Documents\Sample.xlsx")

' A1セルにデータを書き込む
obj.Sheets("Sheet1").Range("A1").Value = "データ入力"

' ブックを保存して閉じる
obj.Close SaveChanges:=True

End Sub

Dim obj As Object で汎用オブジェクト型を使用
Workbooks.Open("ファイルパス") で他の Excel ファイルを開く
obj.Close SaveChanges:=True でファイルを保存して閉じる

・Range(セル範囲)オブジェクトを操作

汎用オブジェクト型でセル範囲を変更

Sub ChangeCellColor()

Dim obj As Object
Set obj = Sheets("Sheet1").Range("A1:A5")

' 背景色を黄色に設定
obj.Interior.Color = RGB(255, 255, 0)

End Sub

Dim obj As Object でセル範囲を格納
obj.Interior.Color = RGB(255, 255, 0) で背景色を変更

【VBA】背景色の一覧と設定方法:Interiorオブジェクトの使用方法

・Collection を使用してオブジェクトのリストを管理

オブジェクトを配列のように扱いたい場合は、Collection オブジェクトを使用すると便利です。

Sub UseObjectCollection()

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 ws でシートオブジェクトを追加
.Count を使ってすべてのオブジェクトに処理を適用

【VBA】シートを追加して名前を付ける方法:Sheets.Addメソッド・Nameプロパティ

オブジェクト型を使用する際の注意点

Set ステートメントを忘れない

オブジェクト型の変数に値を代入する際には、Set を使用 しなければなりません。

誤った例(エラー)

Dim obj As Object
obj = Sheets("Sheet1") ' ❌ エラー発生

正しい例

Dim obj As Object
Set obj = Sheets("Sheet1") ' ✅ 正しい

Nothing の確認

オブジェクト型の変数は、適切に初期化されていない場合 Nothing になり、エラーが発生することがあります。

Nothing のチェック方法

Dim obj As Object
If obj Is Nothing Then

MsgBox "オブジェクトがセットされていません。"

End If

IntelliSense(入力補助)が無効

Object 型を使うと、VBA の IntelliSense(入力補助)が無効になる ため、Worksheets("Sheet1")Range("A1") など、特定のオブジェクト型を指定した方が便利な場合もあります。

推奨される記述

Dim ws As Worksheet ' IntelliSense が有効
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Range("A1").Value = "Hello"

まとめ

項目内容
オブジェクト型とは?Excel のオブジェクト(Workbook、Worksheet、Range など)を変数に格納できる型
Object 型のメリットどんなオブジェクトでも格納可能、柔軟なプログラムが作成できる
特定の型との違いWorksheetRange を使うと IntelliSense が有効になる
Set の使用オブジェクト型の代入には Set が必須
Nothing の確認Is Nothing を使ってオブジェクトがセットされているかチェック

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