【Excelマクロ】Withの入れ子はアリかナシか?

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は繰り返しを減らす便利な書き方
  • 入れ子にすることは可能だが、深くなりすぎると読みにくい
  • 必要なら変数に代入して操作する方がスマートな場合もある

「簡潔さ」と「読みやすさ」は常にトレードオフです。どちらを優先すべきかを意識しながら、使い分けていくことが大切です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール