Excel VBA では、変数のデータ型を指定する際に、「オブジェクト型(Object 型)」 を使うことができます。
 Object 型を使用すると、ワークブック、ワークシート、セル範囲、グラフ、クラスオブジェクトなど、さまざまなオブジェクトを格納 できます。
本記事では、オブジェクト型の基本的な使い方と、具体的な活用例、注意点について 詳しく解説します。
目次
オブジェクト型(Object 型)とは?
オブジェクト型(Object 型) とは、VBA で ワークシートやセル範囲、クラスモジュールなどのオブジェクトを格納するためのデータ型 です。
通常のデータ型(Integer や String など)とは異なり、オブジェクト型は Excel のオブジェクト(Workbook、Worksheet、Range など)を変数に格納 できます。
・オブジェクト型の宣言方法
オブジェクト型の変数を使用するには、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 型のメリット | どんなオブジェクトでも格納可能、柔軟なプログラムが作成できる | 
| 特定の型との違い | WorksheetやRangeを使うと IntelliSense が有効になる | 
| Setの使用 | オブジェクト型の代入には Setが必須 | 
| Nothingの確認 | Is Nothingを使ってオブジェクトがセットされているかチェック |