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

【VBA】複数オブジェクトで With を使う方法と書き方の工夫

VBA では、オブジェクトに対する複数の操作をまとめて記述できる With ステートメントがあります。
ただし、1つの With ステートメントでは1つのオブジェクトしか扱えません。

それでは、複数のオブジェクトに対して With を使いたい場合はどうすればいいのでしょうか?

本記事では、複数オブジェクトに対して With を効果的に使う方法、パターン別の活用方法、注意点 を解説します。

With は1つのオブジェクトに対してのみ使える

まず前提として、1つの With ステートメントでは 1つのオブジェクトしか指定できません

With Range("A1")

.Value = "OK"

End With

👇 これは OK。ですが、次のような使い方はできません:

' ❌これは構文エラー
With Range("A1"), Range("B1")

.Value = "NG"

End With

📌 With に複数オブジェクトを直接指定することはできません。

複数の With を連続して使う方法

複数オブジェクトを操作したいときは、複数の With を個別に記述 します。

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

✅ 例:2つのセルに書式設定

Sub FormatTwoCells()

With Range("A1")

.Value = "商品A"
.Font.Bold = True
.Interior.Color = RGB(255, 255, 200)

End With

With Range("B1")

.Value = "商品B"
.Font.Italic = True
.Interior.Color = RGB(200, 255, 255)

End With

End Sub

📌 それぞれのオブジェクトに対して With を使い、明示的に設定する!

ループを使って複数オブジェクトに同じ処理をする

似たような処理を複数のセルやオブジェクトに一括適用したい場合、For Each ループと With を組み合わせると便利です。

【VBA】For Each を使ったセル範囲の操作方法

✅ 例:複数セルに共通フォーマットを設定

Sub FormatMultipleCells()

Dim rng As Range
For Each rng In Range("A1, B1, C1")

With rng

.Font.Bold = True
.Interior.Color = RGB(220, 230, 241)

End With

Next rng

End Sub

📌 同じ処理を複数セルに効率よく適用できる!

複数プロパティをネストして使う

オブジェクトの中の別オブジェクト(たとえば Range.Font)にも With を使って入れ子にできます。

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

✅ 例:セルとそのフォントを With で入れ子に

Sub NestedWithExample()

With Range("A1")

.Value = "合計"
With .Font

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

End With

End With

End Sub

📌 1つのメインオブジェクトの中で、さらにそのプロパティに対して With を使うことが可能!

複数シートや図形など、複数オブジェクトを変数で扱う

シートや図形など複数のオブジェクトに対して With を使いたい場合は、変数と For Each の組み合わせがベストです。

【VBA】For Each ステートメントの使い方と活用例

✅ 例:全シートの A1 セルに見出しを設定

Sub SetTitleToAllSheets()

Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets

With ws.Range("A1")

.Value = "タイトル"
.Font.Bold = True
.Interior.Color = RGB(240, 240, 240)

End With

Next ws

End Sub

📌 各シートに対して With を繰り返し使えば、複数オブジェクトにも柔軟に対応できる!

条件によって異なるオブジェクトに With を使う

✅ 例:条件で操作対象を切り替えて With を使用

Sub ConditionalWith()

Dim target As Range
If Range("D1").Value = "左" Then

Set target = Range("A1")

Else

Set target = Range("B1")

End If

With target

.Value = "選択されました"
.Font.Color = vbBlue

End With

End Sub

📌 あらかじめ変数に対象オブジェクトを入れておけば、With で一括処理可能!


まとめ

方法内容
With を個別に書く複数オブジェクトに対して処理を明確に分けられる
With + ループ同じ処理を複数オブジェクトに効率よく適用できる
With のネストサブオブジェクト(例:Font)にも綺麗に対応可能
With + 変数柔軟に操作対象を変更可能でメンテナンス性◎
✅ ワンポイントアドバイス
  • 1つの With に複数オブジェクトは指定できない → ループや変数で分けて使おう

  • 同じ処理を複数に適用するなら For Each が便利

  • コードの可読性が落ちないように、ネストは2段階くらいまでに抑えるのが理想

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