
VBAのWithステートメントとは?構文や使用例、注意点を解説
VBAを作成する時に、同じもの(セルやシート等)に対して複数の設定を行うことはありませんか?Withステートメントを使用することで、複数の設定を簡単に見やすく作成することができます。ここでは、その説明をしていきます。
目次
1.withステートメントについて
1-1.withステートメントとは
withステートメントとは、「単一のオブジェクトまたはユーザー定義型に対して一連のステートメントを実行します。」と書いてもわかりにくいと思うので、少し具体的に説明します。
セルの設定を説明をする場合、例1の説明では「このセルは、」が設定毎に登場してしつこくなります。例2のように説明すると、すっきりします。With「ステートメントは、例2のようにまとめる時に使用します。
例1
このセルは、フォント名が「MS P明朝」です。
このセルは、スタイルが「太字」です。
このセルは、サイズが「14」です。
このセルは、下線設定が「下線」です。
このセルは、色が「赤」です。
例2
このセルは、次の設定です。
フォント名が「MS P明朝」です。
スタイルが「太字」です。
サイズが「14」です。
下線設定が「下線」です。
色が「赤」です。
1-2.withステートメントの構文
withステートメントの構文は以下の通りです。
With object statement End With
項目名 | 必須/省略可能 | 説明 |
object | 必須 | オブジェクトまたはユーザー定義型の名前 |
statement | 省略可能 | objectに対して実行する1つ以上のステートメント |
2.withステートメントの使用例
2-1.基本的な使用例
下記は、選択しているセルの設定を変更するソースです。
sub sample01() With Selection.Interior 'セルの設定 .PatternColorIndex = 3 'パターンンの色 .Color = 65535 '塗りつぶす色 .TintAndShade = 0 '色の明るさ .PatternTintAndShade = 0 '色の濃淡 End With end sub
2-2.その他の使用例
2-2-1.ネストを使った例
withステートメントでは、下記のようにネスト(入れ子)を使うことができます。
Sub sample05() With Worksheet(sample1) '「sample1」シートに Range("A1") = "sample1" 'セルA1に「sample1」を設定 Range("A2") = "aaa" 'セルA2に「aaa」を設定 With Worksheet(sample2) '「sample1」シートに Range("A1") = "sample2" 'セルA1に「sample2」を設定 Range("A2") = "aaa" 'セルA2に「aaa」を設定 End With End With End Sub
3.注意点
ネストを使う時には、注意することがあります。Withステートメントのネストは、階層が深い定義が有効になり、「End with」で抜けると一つ上のwithステートメントが有効になります。
下記のソースでは、セルA3に「AAA」を設定の処理は、「sanple2」シートではなく「sample1」シートに設定されます。Withステートメントの有効範囲は、「with」から「End with」までの範囲です。Withで定義した「sample1」シートの有効範囲はWith Worksheet(sample1)から2回目のEnd Withまで、「sample2」シートの有効範囲はWith Worksheet(sample2)から1回目のEnd Withまでになります。
Sub sample06() With Worksheet(sample1) '「sample1」シートに Range("A1") = "sample1" 'セルA1に「sample1」を設定 Range("A2") = "aaa" 'セルA2に「aaa」を設定 With Worksheet(sample2) Range("A1") = "sample2" 'セルA1に「sample2」を設定 Range("A2") = "aaa" 'セルA2に「aaa」を設定 End With Range("A3") = "AAA" 'セルA3に「AAA」を設定 End With End Sub
4.最後に
Withステートメントは、作成時のソース量を少なくするだけではなく、読みやすくする目的でも使用されます。有効に使用してください。
コメント