ネストされた vba with ステートメントを使用するにはどうすればよいですか?
キーポイント
- コードを最小限にするには、VBA With ステートメントを使用します。
- With ステートメントを使用する場合、一度に使用できるオブジェクトは 1 つだけです。
宣言付きVBAとは
VBA With は、オブジェクトを一度指定して、それに対して複数のステートメントを実行するステートメントです。簡単に言うと、「WITH」ステートメントを使用してオブジェクトを指定すると、すべてのプロパティとメソッドに一度にアクセスできるようになります。 「〜で」で始まり「で終わる」で終わります。
ステートメントを使用した VBA の構文
VBA で With ステートメントを使用するために使用する必要がある構文は次のとおりです。
With [OBJECT] [Statement] End With
- With : これは、言及されたオブジェクトを指定していることを VBA に伝えるステートメントの開始キーワードです。
- オブジェクト: ここでは、使用するオブジェクトを指定する必要があります。
- Statement : 指定したオブジェクトで実行する 1 つ以上のステートメント。
- End With : これはステートメントの終了キーワードです。
VBA With ステートメントを理解する例
詳細なステートメントを理解するために例を見てみましょう。セル A1 のフォントの色、サイズ、名前を変更するとします。これら 3 つのことを行うには、3 つの異なるVBA フォントプロパティにアクセスする必要があり、コードは次のようになります。
Range("A1").Font.Color = RGB(0, 0, 255) Range("A1").Font.Size = 16 Range("A1").Font.Name = "Consolas"
ただし、ここでは上記のコードの代わりに With ステートメントを使用します。 VBA With ステートメントを使用するには、次の手順に従います。
- まずキーボード「With」を入力します。
- その後、VBAでセルA1を範囲指定し、フォントオブジェクトを使用してフォントオブジェクトを指定します。
- 次に、3 つのプロパティのコードと適用する値を入力する必要があります。
- 最後に「End With」というキーワードを使用してステートメントを終了します。
これが先ほど書いたコードです。
Sub MyMacro() With Range("A1").Font .Color = RGB(0, 0, 255) .Size = 16 .Name = "Consolas" End With End Sub
次に、両方のコードを見て、「With」ステートメントを使用した場合の違いを理解してみましょう。
最初のコードでは、フォント オブジェクトを 3 回使用し、その後、アクセスして変更を加えたいプロパティを使用しました。
しかし、2 番目のコードでは、With ステートメントを使用して、すぐにフォント オブジェクトを指定しました。次に、「With」ステートメント内の 3 行のコードで 3 つのプロパティにアクセスします。
“With” ステートメントを使用してオブジェクトを指定すると、作成したすべてのステートメントが指定されたオブジェクトで実行されるように VBA に指示されます。これにより、構造化されたコードが得られるだけでなく、マクロの実行が高速化され、効率が向上します。
ネストされた with ステートメント
冒頭で、With ステートメントを使用するために指定できるオブジェクトは 1 つだけであると説明しました。ただし、複数のアイテム、さらには複数のアイテムを一緒に使用する方法があります。これはVBA LOOPSを使用しており、FOR EACH LOOP を使用して複数のオブジェクトをループし、「With」を使用します。
例を挙げましょう。すべてのワークシートを調べて、次のすべてを各ワークシートのすべてのセルに適用する必要があります。
- フォントサイズ: 16
- フォント: ベルデナ
また、ワークブックには、次の例のように 5 つのワークシートがあります。
ネストされた「With」ステートメントを作成するには、次の手順を使用します。
- まず、ワークシート オブジェクトを使用する変数を宣言する必要があります。
- その後、先ほど述べたように、 For Each Loop を使用する必要があります。したがって、すべてのワークシートをループできるループを含むコードを記述する必要があります。
- ここで、上で説明したフォント設定を適用できる with ステートメントを入力します。ワークシート内のすべてのセルを参照するには、件名を指定するときに「セル」を使用します。
これが先ほど書いた完全なコードです。
Sub MyMacro() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets With Cells .Font.Size = 16 .Font.Name = "Verdena" End With Next ws End Sub
関連するチュートリアル
- VBA の面接での質問
- VBAコードにコメントを追加する
- VBA コードに改行を追加する
- VBAで文字列に改行(キャリッジリターン)を追加する
- Excel でマクロを実行する (VBA コードを実行する)