同じ場面を効率的に処理する方法:Withステートメントの活用
マクロを組んでいくと、同じ処理が何度も出てくることがあります。
例えば、次のようなケースです。
- 同じセルに対して複数の処理を行う場合
- 同じシートに対して複数の処理を行う場合
これらの処理をそのまま記載すると、何度も「同じセル」や「同じシート」を指定するため、コードが長くなりがちで、メンテナンス性が低下します。
この問題を解消するのが 「Withステートメント」 です。
同じセルに対して複数の処理を行う
たとえば、セル A1
に対して以下の処理を行うとします。
- 背景色を黒にする
- 文字色を白にする
- セル全体を罫線で囲む
通常は、これを次のように記述します。
Cells(1, 1).Interior.Color = RGB(0, 0, 0) ' 背景色を黒にする
Cells(1, 1).Font.Color = RGB(255, 255, 255) ' 文字色を白にする
Cells(1, 1).Borders.LineStyle = xlContinuous ' 罫線を引く
この場合、見ていただいている通り、Cells(1, 1)
の指定が繰り返されているため、コードが長くなってしまっています。こういった場合に便利なのが Withステートメント です。
Withステートメントの使い方
Withステートメント を使うと、何度も出てくる「Cells(1, 1)」
(指定するものをオブジェクトと呼びます)を1度だけ指定し、それ以降のプロパティやメソッドを簡潔に記述できます。
書き方は次の通りです。
1.With
の横にオブジェクトを指定します。2.With〜End With
の間に、オブジェクトに関連する処理を記載します。
3.オブジェクトに続くプロパティやメソッドを「.
(ドット)」で繋ぎます。
先ほどのコードを Withステートメント を使って書き直すと、次のようになります。
With Cells(1, 1)
.Interior.Color = RGB(0, 0, 0) ' 背景色を黒にする
.Font.Color = RGB(255, 255, 255) ' 文字色を白にする
.Borders.LineStyle = xlContinuous ' 罫線を引く
End With
このようにCells(1, 1)
の指定を1度だけ記載すればよくなり、コードがスッキリします。
同じシートに対して複数の処理を行う
Withステートメントはオブジェクトを複数回使う場合に使えるものなので、セルだけでなく、シートを指定することもできます。
たとえば、シートに対して次のような操作を行うとします。
- シート名を「一覧」に設定する
- シートの背景色を灰色にする
- シートのセル
A1
に「データ」と入力する
通常は次のように記述します。
Sheets(1).Name = "一覧"
Sheets(1).Tab.Color = RGB(200, 200, 200)
Sheets(1).Cells(1, 1).Value = "データ"
これも Withステートメント を使うと、次のように簡潔に記述できます。
With Sheets(1)
.Name = "一覧" ' シート名を設定
.Tab.Color = RGB(200, 200, 200) ' シートの背景色を灰色に
.Cells(1, 1).Value = "データ" ' セルA1に「データ」と入力
End With
まとめ
- Withステートメント を使うことで、同じオブジェクトを何度も記述する必要がなくなり、コードが読みやすくなります。
Cells
やSheets
だけでなく、他のオブジェクトにも活用可能です。- 複数のプロパティやメソッドを扱う際には、積極的に Withステートメント を使用しましょう。
おすすめポイント
- 複雑な処理がスッキリまとまる
- コードのミス(オブジェクト指定忘れなど)が減る
- 可読性と保守性が向上する
ぜひ、さまざまな場面で Withステートメント を活用してみてください!
コメント