VBAの記述を簡潔にする方法として「With」構文は非常に便利ですが、「入れ子にしても大丈夫なのか?」と疑問を感じたことはありませんか?
Withの入れ子構造(ネスト)について、メリット・注意点、そして実務での使いどころをわかりやすく解説します。
Withを使うと何が良いのか
With構文を使うと、同じオブジェクトに対して複数の操作をまとめて記述できます。
例えば次のようなコード
Cells(1, 1).Value = "商品A"
Cells(1, 1).Font.Bold = True
Cells(1, 1).Font.Color = vbRed
このような繰り返しは、Withを使って次のようにスッキリできます。
With Cells(1, 1)
.Value = "商品A"
.Font.Bold = True
.Font.Color = vbRed
End With
記述が短くなり、保守性(メンテナンスのしやすさ)も高まります。
Withの入れ子構造は可能だが慎重に
Withの中にさらにWithを使う「入れ子」は文法上は問題ありません。
次のようなコードも動作します。
With Cells(1, 1)
.Value = "商品A"
With .Font
.Bold = True
.Color = vbRed
End With
End With
この書き方で .Font オブジェクトのプロパティも簡潔に指定できます。
ただし、可読性(見やすさ)が下がる可能性がある点には注意が必要です。
特に入れ子が深くなった場合、「このプロパティはどのWithに属しているのか?」がパッと見でわかりづらくなります。
実務ではどう使うべきか?
入れ子にするかどうかの判断基準として、次のようなポイントがあります。
- 1段階の入れ子なら可読性は保たれやすい
- 3段以上のネスト(入れ子処理)は基本避ける
- 記述が増えるようであれば、変数でオブジェクトを一時的に受ける方が見やすい
たとえば次のように書く方が、スッキリして読みやすいケースもあります。
Dim c As Range
Dim f As Font
Set c = Cells(1, 1)
Set f = c.Font
c.Value = "商品A"
f.Bold = True
f.Color = vbRed
入れ子ではなく、変数に代入してから操作することで、コード全体の見やすさが良くなります。
まとめ
Withの入れ子構文はVBAとしては「アリ」です。ただし、それが「読みやすいかどうか」は別問題です。
- Withは繰り返しを減らす便利な書き方
- 入れ子にすることは可能だが、深くなりすぎると読みにくい
- 必要なら変数に代入して操作する方がスマートな場合もある
「簡潔さ」と「読みやすさ」は常にトレードオフです。どちらを優先すべきかを意識しながら、使い分けていくことが大切です。
