この記事では、VBAのWithステートメントの概要と使い方を実際のVBAコードも含めて紹介します。
Withステートメントは、同じセル等に複数のプロパティを設定する時など何度も同じオブジェクトを記述する手間を省略することができます。
VBAコードを書く手間の削減や可読性の向上にも役に立つステートメントとなりますので、使いどころも多いでしょう。
早速、Withステートメントの概要と実際のVBAコードを見ていきましょう。
VBA│Winthステートメントの概要
この章では、Withステートメントの概要を説明します。
オブジェクトを省略する
まずは、下記のイメージ図をご覧ください。セルB2に合計額というテキストが設定されています。
セルB2に対して実施した操作は下記の通りです。
- 合計額と入力
- 文字サイズを20に設定
- 赤字に設定
- 太字に設定
- 下線を設定
これらの設定は、基本的なVBAの構文の場合、すべてのステートメント(行)に「セルB2に・・」というようにオブジェクトを指定しなければなりません。「セルB2に合計額というテキストを設定」「セルB2のテキスト色を赤字に設定」・・という具合です。
この「セルB2」というオブジェクトを予め設定しておき、指定する範囲において「セルB2」という記述を省略するのが今回の記事で説明するWithステートメントです。
Withステートメントを使わない例
- セルB2に合計額というテキストを設定
- セルB2の文字サイズを20に設定
- セルB2を赤字に設定
- セルB2を太字に設定
- セルB2に下線を設定
Withステートメントを使った例
- 合計額というテキストを設定
- 文字サイズを20に設定
- 赤字に設定
- 太字に設定
- 下線を設定
VBA│Withステートメントの実例
前章では、Withステートメントの概要を説明しました。オブジェクトを省略して記述することの意味はご理解いただけたかと思います。
この章では、Withステートメントを使った実際のVBAコードを紹介します。
基本
With.object
・・・
End With
- object = 省略するオブジェクト
- End With = Withステートメントの有効範囲
実例VBAコード
前章の事例を基に説明します。
- 合計額というテキストを設定
- 文字サイズを20に設定
- 赤字に設定
- 太字に設定
- 下線を設定
[基本:実例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ステートメントは入れ子で記述することも可能です。
この章で紹介した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ステートメントの入れ子の一例としてご参照ください。