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に置き換えてみてください。


コメント