Excel VBA では、ワークシート(シート)に対して操作を行う場面が多い です。
このときに便利なのが、With
ステートメント。オブジェクト(ここではシート)に対して、複数の操作をスッキリ記述できます。
本記事では、シートを指定して With
を使用する方法 を、基礎から応用まで具体例付きで解説 します。
目次
With を使う基本構文(シート版)
With Worksheets("Sheet1")
.Range("A1").Value = "こんにちは"
.Range("B1").Font.Bold = True
End With
📌 Worksheets("Sheet1")
を対象にして、複数のプロパティ・メソッドをまとめて実行しています。
📌 .Range
などのプロパティはすべて "Sheet1"
シート上で実行されます。
With × Worksheets の使い方
✅ シートに値を書き込む・書式を設定する
Sub SetValuesToSheet()
With Worksheets("売上表")
.Range("A1").Value = "月"
.Range("B1").Value = "売上"
.Range("A1:B1").Font.Bold = True
.Range("A1:B1").Interior.Color = RGB(200, 200, 255)
End With
End Sub
📌 シート名 "売上表"
を1回指定するだけで、複数のセルにまとめて処理できます!
【VBA】format関数:「日時・桁数・0埋め・Now」使用方法
✅With とシートオブジェクト変数の併用
オブジェクト変数を使えば、シート名の繰り返しを防ぎ、柔軟なコードが書けます。
Sub FormatSheetWithVariable()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("データ入力")
With ws
.Range("A2").Value = "商品A"
.Range("B2").Value = 1500
.Columns("B").NumberFormat = "#,##0"
End With
End Sub
📌 変数 ws
を通して、コードがより読みやすく&メンテナンスしやすくなります。
✅With の中でさらにセル操作をまとめる
さらに With
の中で、セルオブジェクトなどをネスト(入れ子)にしても使えます。
Sub NestedWithExample()
With Worksheets("請求書")
.Range("A1").Value = "請求書"
.Range("A1").Font.Size = 16
With .Range("A1")
.Font.Bold = True
.Font.Color = RGB(0, 0, 255)
End With
End With
End Sub
📌 .Range("A1")
の中にさらに With
を入れることで、複数のフォント設定を効率化できます。
【VBA】With ステートメントの中に If 文を入れる方法と活用例
✅複数シートを対象に With を使うループ
For Each
を使って 複数のシートを順番に処理する場合 にも、With
を活用できます。
Sub LoopSheetsWithWith()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
With ws
.Range("A1").Value = "シート名:" & .Name
.Range("A1").Font.Bold = True
End With
Next ws
End Sub
📌 すべてのシートの A1 セルに、シート名を太字で表示!
✅シートが存在するか確認して With を使う
存在しないシートを指定するとエラーになるため、事前に確認する コードも紹介します。
Sub SafeWithUsage()
Dim ws As Worksheet
On Error Resume Next
Set ws = Worksheets("集計")
On Error GoTo 0
If ws Is Nothing Then
MsgBox "指定されたシートが見つかりません", vbExclamation
Exit Sub
End If
With ws
.Range("A1").Value = "データ準備済"
.Range("A1").Font.Color = vbGreen
End With
End Sub
📌 Set ws = Worksheets("集計")
で取得し、存在チェック後に With
を安全に使えます。
まとめ
ポイント | 内容 |
---|---|
With はオブジェクトの繰り返しを省略できる | シート指定にも有効で、見やすいコードが書ける |
Worksheets("名前") を使うことで明示的にシートを指定可能 | 書式設定やデータ入力の自動化に最適 |
変数(Set ws = ... )を使うとさらに柔軟に | シート名が変わっても1か所の修正で済む |
ループ処理とも相性がよく、全シート処理にも使える | For Each ws In Sheets の中で活用 |
シート存在チェックでエラーを防ぐことができる | ws Is Nothing を使って安全に実行可能 |
💡ワンポイント
✅ 書式設定やヘッダーの自動入力など、シート単位での処理に With
はとても有効です。
✅ 変数と組み合わせることで、さらに保守性・可読性がアップします!