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

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

VBA では、With ステートメントを使うことで、同じオブジェクトのプロパティやメソッドを簡潔に記述 できます。
さらに、With の中に With を入れ子(ネスト)にする ことで、複雑なオブジェクトの操作を効率化 することが可能です。

本記事では、VBA における With の入れ子の書き方、活用例、メリット・デメリット を解説します。

With ステートメントの基本

With を使うと、オブジェクトのプロパティを簡潔に記述できます。

With の基本構文

With オブジェクト

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

End With

📌 同じオブジェクトに対する操作を With でまとめると、記述が簡潔になる!

【VBA】複数オブジェクトをWithステートメントで処理する方法

With の入れ子(ネスト)の基本

あるオブジェクトの プロパティやメソッドがさらに別のオブジェクトを参照している場合With の中に With を入れることが可能です。

With を入れ子にする基本構文

With オブジェクト1

.プロパティ1 = 値
.プロパティ2 = 値
With .プロパティのオブジェクト

.プロパティA = 値
.プロパティB = 値

End With

End With

📌 ネスト(入れ子)を使うことで、オブジェクトの階層構造を簡潔に記述!

【VBA】Withステートメント内でMe(自分自身)キーワードの使用方法

With の入れ子の活用例

✅フォントとセルの書式設定を With の入れ子で設定

Sub FormatCellsNestedWith()

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 の入れ子で効率的に記述!
📌 With Range("A1:A10") の中で .FontWith でさらにまとめる!

【VBA】With ステートメントの中に If 文を入れる方法と活用例

✅ヘッダーとフッターの設定

Sub SetHeaderFooter()

With ActiveSheet.PageSetup

With .CenterHeader

.Text = "会社名 - レポート"

End With

With .CenterFooter

.Text = "作成日: &[Date] ページ &[Page] / &[Pages]"

End With

End With

End Sub

📌 PageSetupHeaderFooter の設定を With で入れ子に!
📌 可読性が向上し、どこを設定しているのかが分かりやすい!

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

✅グラフのフォーマットを With の入れ子で設定

Sub FormatChartWithNestedWith()

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

With chartObj.Chart

.ChartTitle.Text = "売上データ"

With .Axes(xlCategory)

.HasTitle = True
.AxisTitle.Text = "月"

End With

With .Axes(xlValue)

.HasTitle = True
.AxisTitle.Text = "売上金額"

End With

End With

End Sub

📌 Chart 内の AxesWith でまとめ、さらに AxisTitleWith でネスト!
📌 グラフのタイトルや軸のフォーマットを分かりやすく整理!

【VBA】Exit Forの入れ子(ネスト)する方法:For文

With の入れ子(ネスト)のメリット・デメリット

✅ メリット

メリット説明
コードの可読性が向上同じオブジェクトのプロパティやメソッドを簡潔に記述できる
処理速度が向上With を使うと VBA がオブジェクトを一度だけ参照するため、処理が速くなる
コードが短くなる変数を使わずにオブジェクトのプロパティを階層的に設定可能

❌ デメリット

デメリット説明
ネストが深くなると可読性が下がるWith の階層が増えると、どのプロパティを設定しているのか分かりにくくなる
デバッグが難しくなるWith 内のオブジェクトの途中経過を Debug.Print で確認しにくい
意図しないオブジェクトに適用される可能性With の範囲を誤ると、意図しないオブジェクトのプロパティが変更されることがある

With の入れ子を使う際のベストプラクティス

✅深いネストを避ける

' ❌ ネストが深くて読みにくい
With Range("A1:A10")

With .Font

With .Bold

' ここまで深くすると分かりにくい

End With

End With

End With

📌 3階層以上のネストは避けるのがベスト!

✅適切なコメントを入れる

Sub FormatCellsWithComments()

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

📌 どの部分を設定しているのか、コメントを適切に入れると可読性が向上!

✅変数を使ってネストを避ける

Sub FormatCellsWithVariable()

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

With rng

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

End With

End Sub

📌 オブジェクト変数を使うと、With のネストを減らせる!


まとめ

項目ポイント
With の入れ子の活用同じオブジェクト内のプロパティを簡潔に記述
メリット可読性向上・処理速度向上・コードの短縮
デメリット深すぎると可読性が低下・デバッグしづらい
ベストプラクティス深いネストを避ける・コメントを入れる・変数を活用

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