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

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

Excel VBA では、ワークブック(Workbook)、ワークシート(Worksheet)、セル範囲(Range)などのオブジェクトを操作することがよくあります。これらのオブジェクトを変数に格納して扱うために使用するのが オブジェクト変数 です。

オブジェクト変数の基礎 から 具体的な使用例 まで解説します。

オブジェクト変数とは?

オブジェクト変数とは、Excel VBA で ワークブックやシート、セルなどのオブジェクトを格納する変数 のことです。

通常の変数と異なり、オブジェクト変数を使用するには Set ステートメント が必要です。

例: オブジェクト変数の基本

Sub ExampleObjectVariable()

Dim ws As Worksheet ' ワークシート用のオブジェクト変数
Set ws = ThisWorkbook.Sheets("Sheet1") ' オブジェクトを格納

' シート名を表示
MsgBox "シート名: " & ws.Name

End Sub

解説

  • Dim ws As Worksheet でオブジェクト変数を宣言
  • Set ws = ThisWorkbook.Sheets("Sheet1")オブジェクトを代入
  • ws.Name を使って、変数 ws に格納されたシートの名前を取得

オブジェクト変数の利点

・ コードの可読性向上

オブジェクトを直接記述する代わりに、変数を使うことで コードが短く分かりやすく なります。

例: オブジェクト変数なし

Sub WithoutObjectVariable()

ThisWorkbook.Sheets("Sheet1").Range("A1").Value = "Hello"
ThisWorkbook.Sheets("Sheet1").Range("A1").Font.Bold = True

End Sub

例: オブジェクト変数あり

Sub WithObjectVariable()

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

ws.Range("A1").Value = "Hello"
ws.Range("A1").Font.Bold = True

End Sub

メリット

  • ws を使うことで、ThisWorkbook.Sheets("Sheet1")何度も書く必要がなくなる
  • コードがシンプルで メンテナンスしやすい

・ パフォーマンスの向上

オブジェクトを毎回参照すると処理が遅くなる可能性がありますが、オブジェクト変数を使うと高速化 できます。

例: ループ内でオブジェクト変数を使用

Sub ImprovePerformance()

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

Dim i As Integer
For i = 1 To 1000

ws.Cells(i, 1).Value = i

Next i

End Sub

ポイント

  • ws をオブジェクト変数として 事前に格納 し、何度も Sheets("Sheet1") を呼び出さないことで 処理速度が向上

・ コードの柔軟性を向上

オブジェクト変数を使用すると、変数の切り替えが容易 になり、柔軟な処理が可能になります。

例: ユーザーが選択したシートを処理

Sub SelectWorksheet()

Dim ws As Worksheet
Dim sheetName As String

' ユーザーにシート名を入力させる
sheetName = InputBox("シート名を入力してください:")

' 指定されたシートをオブジェクト変数に格納
Set ws = ThisWorkbook.Sheets(sheetName)

' A1セルの値を変更
ws.Range("A1").Value = "Selected Sheet"

End Sub

オブジェクト変数の種類と活用例

・ Workbook(ワークブック)オブジェクト変数

複数のブックを開いて処理をする場合、ワークブックオブジェクト変数を使用すると便利です。

例: 別のブックを開いて処理

Sub OpenWorkbookAndEdit()

Dim wb As Workbook
Set wb = Workbooks.Open("C:\Users\YourName\Documents\Sample.xlsx")

' A1セルに値を設定
wb.Sheets("Sheet1").Range("A1").Value = "Hello from VBA"

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

End Sub

・ Worksheet(ワークシート)オブジェクト変数

特定のワークシートをオブジェクト変数に格納して操作できます。

例: アクティブなシートをオブジェクト変数に代入

Sub WorkWithActiveSheet()

Dim ws As Worksheet
Set ws = ActiveSheet

MsgBox "アクティブなシートは: " & ws.Name

End Sub

Range(セル範囲)オブジェクト変数

範囲を指定する際にオブジェクト変数を使うと、コードが読みやすくなります。

例: 特定範囲の背景色を変更

Sub HighlightRange()

Dim rng As Range
Set rng = Range("A1:D10")

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

End Sub

オブジェクト変数の注意点

Set ステートメントが必要

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

【VBA】Setのわかりやすい活用方法と活用場面

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' ✅ 正しい

誤った例(エラーになる)

Dim ws As Worksheet
ws = ThisWorkbook.Sheets("Sheet1") ' ❌ エラー

Nothing の確認

オブジェクト変数が 適切に設定されているか確認 するために、Nothing をチェックすることが重要です。

例: Nothing チェック

Sub CheckObjectVariable()

Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Sheets("NonExistentSheet") ' 存在しないシート
On Error GoTo 0

If ws Is Nothing Then

MsgBox "指定したシートは存在しません。"

Else

MsgBox "シート名: " & ws.Name

End If

End Sub

まとめ

オブジェクト変数のポイント

Set を使ってオブジェクトを代入する
✅ シートやブックを格納することで コードの可読性・効率を向上
Nothing を使ってオブジェクト変数の存在をチェック

オブジェクト変数の活用例

🔹 Workbook オブジェクトで他のブックを操作
🔹 Worksheet オブジェクトでシートを柔軟に管理
🔹 Range オブジェクトでセル範囲を簡潔に指定

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