この記事では、VBAのWithステートメントの概要と使い方を実際のVBAコードも含めて紹介します。
Withステートメントは、同じセル等に複数のプロパティを設定する時など何度も同じオブジェクトを記述する手間を省略することができます。
VBAコードを書く手間の削減や可読性の向上にも役に立つステートメントとなりますので、使いどころも多いでしょう。
早速、Withステートメントの概要と実際のVBAコードを見ていきましょう。
この章では、Withステートメントの概要を説明します。
まずは、下記のイメージ図をご覧ください。セルB2に合計額というテキストが設定されています。
セルB2に対して実施した操作は下記の通りです。
これらの設定は、基本的なVBAの構文の場合、すべてのステートメント(行)に「セルB2に・・」というようにオブジェクトを指定しなければなりません。「セルB2に合計額というテキストを設定」「セルB2のテキスト色を赤字に設定」・・という具合です。
この「セルB2」というオブジェクトを予め設定しておき、指定する範囲において「セルB2」という記述を省略するのが今回の記事で説明するWithステートメントです。
前章では、Withステートメントの概要を説明しました。オブジェクトを省略して記述することの意味はご理解いただけたかと思います。
この章では、Withステートメントを使った実際のVBAコードを紹介します。
With.object
・・・
End With
前章の事例を基に説明します。
[基本:実例VBAコード]
Sub Sample()
With Range("B2")
.Value="合計額"
.Font.Size = 15
.Font.ColorIndex = 3
.Font.Bold = True
.Font.Underline = True
End With
End Sub
Withステートメントでは、オブジェクトを省略する構文の前で予めオブジェクトを指定しておきます。
上記の例では、「With Range(“B2”)」の行ですね。以降、End Withまでの間は、With.Range(“B2”)というオブジェクトの代わりに「.(ピリオド)」を記述するだけで、With以降のオブジェクトが指定されます。
なお、上記のサンプルコードはWithステートメントを使わなかった場合、下記のようになります。
[Withステートメントを使わなかった例]
Sub Sample()
Range("B2").Value="合計額"
Range("B2").Font.Size = 20
Range("B2").Font.ColorIndex = 3
Range("B2").Font.Bold = True
Range("B2").Font.Underline = True
End Sub
Withステートメントは入れ子で記述することも可能です。
この章で紹介したWithステートメントの構文では、「Range(“B2”)」というオブジェクトの他にも共通する箇所が存在しています。5行目から8行目にかけては「.Font」も共通していますね。
[共通箇所が複数ある例]
Sub Sample()
With Range("B2")
.Value="合計額"
.Font.Size = 15
.Font.ColorIndex = 3
.Font.Bold = True
.Font.Underline = True
End With
End Sub
この場合、Withステートメントを入れ子にして下記のように記述することができます。
[Withステートメントの入れ子]
Sub Sample()
With Range("B2")
With .Font
.Font.Size = 15
.Font.ColorIndex = 3
.Font.Bold = True
.Font.Underline = True
End With
.Value="合計額"
End With
End Sub
このサンプルには実用性はありませんが、Withステートメントの入れ子の一例としてご参照ください。