VBAで自動化 VBAテクニック集 VBA一覧 Withステートメント 文法・構文

【VBA】With ステートメントとは?使い方と活用例を徹底解説!

VBA を使ってコードを書く際、同じオブジェクトに何度もアクセスすることがよくあります。
そんなときに便利なのが、With ステートメント です。

With を使うことで、コードをシンプルにし、処理の高速化や可読性向上が可能 になります。
本記事では、Excel VBA における With ステートメントとは何か、基本的な使い方、メリット・デメリット、応用例 について解説します。

With ステートメントとは?

With ステートメントは、特定のオブジェクトに対する複数のプロパティやメソッドを簡潔に記述するための構文 です。

通常、オブジェクトのプロパティを設定するには、オブジェクト名を毎回書く必要がありますが、
With を使うと 一度の指定で複数のプロパティをまとめて設定 できます。

With ステートメントの基本構文

With オブジェクト

.プロパティ1 = 値
.プロパティ2 = 値
.メソッド

End With

📌 With の中では .(ドット)を使ってオブジェクトのプロパティやメソッドを記述可能!
📌 処理対象のオブジェクトを With でまとめることで、コードを簡潔に!

With の基本的な使い方

セルのフォーマットを設定する

Sub FormatCells()

With Range("A1:A10")

.Font.Bold = True
.Font.Size = 12
.Interior.Color = RGB(255, 255, 0)

End With

End Sub

📌 Range("A1:A10") に対して、フォントの太字、サイズ、背景色をまとめて設定!
📌 With を使うことで Range("A1:A10") の記述を省略できる!

【VBA】With ステートメントで発生するエラーの原因と対策

シートの印刷設定

Sub SetPrintSettings()

With ActiveSheet.PageSetup

.Orientation = xlLandscape ' 横向き
.PaperSize = xlPaperA4 ' A4サイズ
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1

End With

End Sub

📌 シートの印刷設定を With でまとめて記述!
📌 個別に書くよりシンプルで、修正も簡単!

【Excel】印刷でヘッダーを固定する方法【表のタイトルを各ページに表示】

グラフの設定

Sub FormatChart()

Dim chartObj As ChartObject
Set chartObj = ActiveSheet.ChartObjects(1)

With chartObj.Chart

.ChartTitle.Text = "売上データ"
.HasLegend = True
.Legend.Position = xlLegendPositionBottom

End With

End Sub

📌 グラフのタイトルや凡例の設定を With でまとめることで、可読性向上!

With ステートメントのメリット・デメリット

【VBA】With を使わない方法とそのメリット・デメリット

✅ With を使うメリット

メリット説明
コードが短くなるWith を使うことで、オブジェクト名の繰り返し記述を省略可能
可読性が向上するどのオブジェクトに対して操作しているのか明確になる
処理が高速化するWith を使うと、オブジェクトの参照回数が減り、処理が速くなる
メンテナンスがしやすいオブジェクト名を一箇所で指定するため、修正が楽

❌ With を使うデメリット

デメリット説明
深いネストは可読性を下げるWith の中に With を入れると、どのオブジェクトに対する操作かわかりにくくなる
途中の変数を Debug.Print で確認しにくいWith の中では、途中のプロパティを確認しづらい
オブジェクトが Nothing の場合エラーになるWith の対象オブジェクトが存在しないとエラーが発生する

With を使うときの注意点

✅ With の中で他のオブジェクトを扱わない

With の中で CellsRange など 別のオブジェクトを指定すると、With の対象とは異なるオブジェクトになる ので注意。

Sub IncorrectUsage()

With Range("A1:A10")

.Font.Bold = True
Cells(1, 1).Value = "テスト" ' ❌ 別のオブジェクトになってしまう

End With

End Sub

📌 Cells(1,1)WithRange("A1:A10") とは無関係なオブジェクト!
📌 別のオブジェクトを扱う場合は、With の外で処理する!

オブジェクトが存在するか確認する

With の対象オブジェクトが Nothing だった場合、エラーになるので事前に確認すると安全。

Sub SafeWithUsage()

Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Sheets("対象シート")
On Error GoTo 0

If ws Is Nothing Then

MsgBox "シートが見つかりません!", vbExclamation
Exit Sub

End If

With ws

.Range("A1").Value = "データ"

End With

End Sub

📌 事前にオブジェクトが存在するか確認すれば、エラーを防げる!

【VBA】オブジェクトの存在を確認する方法

With の応用:ネスト(入れ子)

With の中に With を入れることで、さらに詳細な設定が可能。

Sub NestedWithExample()

With Range("A1:A10")

.Interior.Color = RGB(255, 255, 0)

With .Font

.Bold = True
.Size = 12
.Color = RGB(255, 0, 0)

End With

End With

End Sub

📌 With の中で .Font をさらに With でまとめると、分かりやすく整理できる!

【VBA】With ステートメントの入れ子(ネスト)の方法と活用例


まとめ

項目内容
With の目的オブジェクトのプロパティやメソッドを簡潔に記述するため
基本構文With オブジェクト ... End With
メリットコードの簡潔化、処理速度向上、可読性向上
デメリットネストしすぎると可読性低下、デバッグしにくい
安全な使い方Set でオブジェクトを明示し、存在確認を行う

-VBAで自動化, VBAテクニック集, VBA一覧, Withステートメント, 文法・構文