
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ステートメントは、作成時のソース量を少なくするだけではなく、読みやすくする目的でも使用されます。有効に使用してください。




コメント