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
を組み合わせると便利です。
✅ 例:複数セルに共通フォーマットを設定
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
の組み合わせがベストです。
✅ 例:全シートの 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段階くらいまでに抑えるのが理想