Last Updated on 2024年5月19日
この記事では、VBAにおけるWithステートメントの使用方法とその利点について詳しく解説します。Withステートメントを活用することで、コードの可読性を高め、繰り返しを減らし、効率的なプログラミングが可能になります。
(Initial Post Date:2024年3月9日)
Withステートメントとは?
Withステートメントは、同一のオブジェクト(モノ)に対して複数の操作を行う際に、コードの可読性を高め、記述量を減らすために使用されます。
簡単に言うと、「〇〇の」という言葉の「「〇〇」を省略します。
例えば、あるシートの特定のセルの値を設定し、フォーマットを変更し、その後に名前を変更したい場合、Withステートメントを使用すると、オブジェクト名を繰り返し書く必要がなくなります。
身近な例で理解するWithステートメント
日常生活での例を考えてみましょう。冷蔵庫からバターを取り出してほしい時、あなたは「冷蔵庫のドアを開けて、冷蔵庫の中にあるバターを取り出して、冷蔵庫のドアを閉めて!」と伝えるでしょうか?

なんともまどろっこしいですよね。
この時、毎回「冷蔵庫」という言葉を繰り返し言う代わりに、「冷蔵庫のドアを開けて中にあるバターを取り出してドアを閉めて!」と一度にまとめて伝えることができます。
実際は、もっと短く表現しますが、そこは置いておいて・・・💦

プログラミングにおいても、同じ物に対して複数の動作を行う場合、「With」を使うことで、冗長をなくしてスッキリと伝えることができます。
「冷蔵庫」をWithステートメントでブロック化すると以下のようになります。

どうでしょう? Withの役割が見えてきたでしょうか?
Withを使用しないVBAとの比較
身近な例で理解していただいたところで、次は、VBAコードでWithを使用しない場合と使用した場合の比較を見て頂きましょう!
Withステートメントを使用しない場合
Withステートメントを使用しない場合、オブジェクト名(Worksheets(“Sheet1”))を何度も繰り返し記述する必要があります。これでは、コードが冗長になり、読みにくくなります。
|
1 2 3 |
Worksheets("Sheet1").Range("A1").Value = "おはよう!" Worksheets("Sheet1").Range("A1").Font.Bold = True Worksheets("Sheet1").Range("A1").Font.Color = RGB(255, 0, 0) |
Withステートメントを使用した場合
前述のコードをWithステートメントを使用したコードに書き換えてみましょう!
|
1 2 3 4 5 |
With Worksheets("Sheet1").Range("A1") ' Sheet1のA1セル .Value = "おはよう!" ' の値を「おはよう!」にして .Font.Bold = True ' の文字を太字にして .Font.Color = RGB(255, 0, 0) ' の文字の色を赤にして End With 'Sheet1のA1セルの処理は、これでおしまい。 |
どうでしょう? とても見やすくなったでしょ!?
この例では、Worksheets(“Sheet1”).Range(“A1”) というオブジェクトに対して、値の設定、フォントの太字化、フォントの色変更という3つの操作を行っていますね。
実務では、このようにオブジェクトを繰り返す場合は、Withステートメントを使うようにしてください。
※下記の「Withステートメントのお作法」をよく読んでからコードを書いてくださいね!
Withステートメントのお作法
Withステートメントを使用する際には、いくつかのお作法があります。これらを守ることで、エラー防止となったり、コードの可読性を高め、他の人が読んだり、将来的に自分自身が読み返したりする際に理解しやすくなります。
1. プロパティやメソッドの前にピリオドを付ける
Withステートメント内でオブジェクトのプロパティやメソッドを参照する際には、必ずピリオド(.)を前置してください。このピリオドは、Withステートメントで指定されたオブジェクトへの参照であることを示します。
2. With~End Withの間のコードを字下げする
Withステートメントを使用する際には、WithとEnd Withの間にあるコードを字下げ(インデント)することが推奨されます。この字下げは、コードの可読性を高めるための基本的なお作法です。字下げをすることで、どのコードがWithステートメントの影響下にあるかが一目でわかり、コードの構造が明確になります。
インデント(字下げ)を行うには、Tabキーを押してください。
同じオブジェクト何回以上でWithを使う?
結論から言うと、同じオブジェクトに対する操作が2回以上ある場合にWithステートメントの使用を検討すべきです。ただし、コードの可読性や整理を目的として、1回の操作であってもWithステートメントを利用することが推奨されることがあります。特に、3回以上同一オブジェクトに対する操作がある場合は、Withステートメントを使用することで、コードの明瞭さを保ち、将来的な変更やメンテナンスを容易にします。
まとめ:Withステートメントの利点
- コードの可読性の向上: Withステートメントを使用することで、コードが整理され、何に対して操作を行っているのかが一目でわかりやすくなります。
- 記述量の削減: オブジェクト名を繰り返し記述する必要がなくなるため、コードの量を減らすことができます。
- エラーの減少: オブジェクト名を間違えて記述するリスクが減少します。
Withステートメントは、VBAでのプログラミングをより効率的に行うための強力なツールです。コードの可読性を高め、繰り返しを減らすことで、より簡潔でメンテナンスしやすいコードを書くことができます。


コメント