〖ExcelVBA・マクロ〗With ~ End With の使い方|セル操作を短く書いてミスを減らす基本テクニック【初心者向け】

With ~ End With の使い方 ExcelVBA

ExcelVBAでセルを操作していると、こんなコードを書きがちです。

Range("A1").Value = "完了"
Range("A1").Font.Bold = True
Range("A1").Interior.Color = vbYellow
Range("A1").HorizontalAlignment = xlCenter

同じ Range("A1") が何度も出てきて、少し読みづらいですよね。
しかも、途中でセル番地を変えるときに修正漏れが起きやすいです。

こういうときに便利なのが With ~ End With です。
同じ対象(セルやシートなど)をまとめて操作できるので、コードが短くなり、ミスも減ります。


スポンサーリンク
スポンサーリンク

With ~ End With とは?

With ~ End With は、一言でいうとこうです。

「同じ対象への操作をまとめて書ける」

Withの中では、対象を .(ドット)で書けます。


基本:同じセルをまとめて設定する

先ほどのコードを With を使って書くと、こうなります。

With Range("A1")
    .Value = "完了"
    .Font.Bold = True
    .Interior.Color = vbYellow
    .HorizontalAlignment = xlCenter
End With

Range(“A1”) が1回だけになり、かなり読みやすくなります。


メリット:セル番地の修正が1か所で済む

例えば対象セルを A1 → B2 に変えたい場合、Withを使えばここだけ変えればOKです。

With Range("B2")
    .Value = "完了"
    .Font.Bold = True
    .Interior.Color = vbYellow
    .HorizontalAlignment = xlCenter
End With

Withを使わない場合、4行すべて直す必要があり、ミスが起きやすいです。


よく使う例①:セルの書式をまとめて整える

Sub Sample_FormatCell()

    With Range("A1")
        .Value = "見出し"
        .Font.Bold = True
        .Font.Size = 12
        .Interior.Color = vbCyan
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With

End Sub

「見出しセルを作る」などの処理は With と相性抜群です。


よく使う例②:範囲(Range)をまとめて設定する

セル1つだけでなく、範囲にも使えます。

Sub Sample_FormatRange()

    With Range("A1:D1")
        .Font.Bold = True
        .Interior.Color = vbYellow
        .HorizontalAlignment = xlCenter
    End With

End Sub

よく使う例③:Worksheet(シート)をWithでまとめる

シートを何度も指定するコードも、Withでスッキリします。

❌ くどい例

Worksheets("集計").Range("A1").Value = "タイトル"
Worksheets("集計").Range("A1").Font.Bold = True
Worksheets("集計").Range("A1").Font.Size = 14

✅ Withでスッキリ

With Worksheets("集計").Range("A1")
    .Value = "タイトル"
    .Font.Bold = True
    .Font.Size = 14
End With

また、シートそのものをWithにすることもできます。

Sub Sample_WithWorksheet()

    With Worksheets("集計")
        .Range("A1").Value = "タイトル"
        .Range("A1").Font.Bold = True
        .Range("A1").Font.Size = 14
    End With

End Sub

この書き方は「同じシートに対して複数セルを操作する」ときに特に便利です。


初心者がやりがちなミス

① ドット(.)を書き忘れる

Withの中は、対象を . で書きます。

❌ NG

With Range("A1")
    Value = "完了"
End With

✅ 正解

With Range("A1")
    .Value = "完了"
End With

② With の対象が何か分からなくなる(ネストしすぎ)

Withは入れ子(ネスト)にできますが、やりすぎると読みにくくなります。

あまり深くしないのがおすすめです。


Withを使うときのおすすめルール

  • 同じ対象を3回以上触るなら With を検討
  • ネスト(入れ子)は1段くらいまで
  • 対象が分かりにくい場合は With を分ける

実務でよくある使いどころ

  • 見出し行の書式設定
  • 表っぽく整える(罫線・色・中央寄せ)
  • 特定セルの強調表示
  • 同じシートへの連続操作

まとめ:Withは「短くする」より「ミスを減らす」ために使う

  • With ~ End With で同じ対象の操作をまとめられる
  • 対象の修正が1か所で済み、修正漏れが減る
  • セル・範囲・シートにも使える
  • ネストしすぎると読みにくいので注意

Withを使えるようになると、VBAが一気に読みやすくなります。
ぜひ、今書いている「同じセルを何度も書いている部分」をWithに置き換えてみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました