Withステートメントはコードの
・保守性を向上
・可読性を向上
させる仕組みです!
Withステートメントの使用により
・同じコードを何度も記述せずにすむ
ようになります!
※記述の重複を防止できます。
またWithステートメントの使用により
・コードの記述量が減り
・コードがスッキリする
します!
前提
一般的な話として
・同じコードを何度も記述するのは良くない(=重複は良くない)
と言われています。
※VBAに限定した話ではないです。全てのプログラミング言語に共通する話です。
理由は
・当該コードを修正することになった場合、
・同じコードが複数(例えば5個)あると、
・複数の箇所(例えば5ヶ所)を修正しないといけない
ためです。
人はミスをする生き物です。ミスを0にすることはできません。
ただミスを少なくする努力はできます。
修正する箇所が多ければ多いほど、ミスをする可能性が上がります。
修正する箇所が少なければ少ないほど、ミスをする可能性が下がります。
※10ヶ所を修正するより1ヶ所を修正する方が、ミスをする可能性が低いです。
よって仕様変更等が起きた際に、
・修正する箇所が少ないコードが良いコード
・ミスする可能性が低いコード(=保守性の良いコード)
と言われています。
Withステートメントとは
Withステートメントはコードの
・保守性を向上
・可読性を向上
させる仕組みです。
※VBA以外のプログラミング言語にもあります。
※どのプログラミング言語にもほぼあります。「あるある」な仕組みです。
Withステートメントを使用することで
・コードの記述量が減り
・コードがスッキリする
します。
※ゴチャゴチャしているよりスッキリしている方が何かと良いです。
Withステートメントを使用しない場合
例えばWithステートメントを「使用しない場合」、にシート「sample」のセル「B2」に
・文字列「aiueo」を設定
・文字色を赤
・太字
にする場合、以下となります。
Sub test()
Worksheets("sample").range("B2").Value = "aiueo"
Worksheets("sample").range("B2").Font.Color = XlRgbColor.rgbRed
Worksheets("sample").range("B2").Font.Bold = True
End Sub
上記の通り
・「Worksheets(“sample”).range(“B2”)」の記述を3回
しなければなりません。
※同じコードを複数記述しなければなりません。
そのため、例えば処理対象のシートを「sample」から別のシートへ変更することになった場合、3ヶ所を修正しなければなりません。
※複数の箇所を修正しなければなりません。
Withステートメントを使用する場合
同様の処理をWithステートメントを「使用する場合」だと、以下になります。
Sub test()
With Worksheets("sample").range("B2")
.Value = "aiueo"
.Font.Color = XlRgbColor.rgbRed
.Font.Bold = True
End With
End Sub
上記の通り
・「Worksheets(“sample”).range(“B2”)」の記述が1回
ですむようになります。
※同じコードの記載を少なくすることができます。
そのため、例えば処理対象のシートを「sample」から別のシートへ変更することになった場合、1ヶ所のみを修正すれば良いです。
※修正箇所を少なくすることができました。
※ミスをする可能性を下げることができました。
修正箇所が少ないため「保守性の良いコード」となります。
また同じ記述を少なくすることより
・コードの記述量が減り
・コードがスッキリする
ため、可読性の良いコードとなります。
参考①
以下の記事に
・Withステートメントを使用したVBAコード
を記載しています。
あわせてご確認いただければと思います。
参考②
Withステートメントの詳細について、公式サイトをご確認ください。
参考③
「同じコードを何度も記述するのは良くない(=重複は良くない)」というのは、一般的に「DRY原則」と言われています。
「DRY原則」の詳細は、以下をご確認ください。