VBA Withステートメントとは
VBAのWith...End With
ステートメントは、特定のオブジェクトに対して一連のステートメントを実行する際に役立ちます。これを使用することで、同じオブジェクトに対して繰り返しアクセスする必要がある場合にコードを簡潔にし、可読性を高めることができます。
VBA Withステートメントの基本
With...End With
ステートメントは、次のような構文で使用されます。
With オブジェクト
' 実行するステートメント
End With
ここで、オブジェクト
はアクセスしたいオブジェクトを指定し、ステートメント
はそのオブジェクトに対して実行したい一連の処理です。With
ブロック内では、オブジェクトのメンバーにピリオドを付けて直接アクセスできます。
Withステートメントのサンプルコード
例1: セルのプロパティを変更
セルA1のフォントサイズ、名前、背景色などを変更する場合、通常は次のように書きます。
Range("A1").Font.Size = 15
Range("A1").Font.Name = "Verdana"
Range("A1").Interior.Color = vbYellow
' 他のステートメント...
しかし、With...End With
を使用すると、次のように記述できます。
With Range("A1")
.Font.Size = 15
.Font.Name = "Verdana"
.Interior.Color = vbYellow
' 他のステートメント...
End With
この方法では、Range("A1")
を繰り返し記述する必要がなく、コードが簡潔になります。
例2: フォントプロパティの変更
セルA1のフォント関連プロパティを一括で変更する場合、次のように書けます。
With Range("A1").Font
.Bold = True
.Color = vbRed
.Italic = True
.Size = 20
.Underline = True
End With
この例では、Range("A1").Font
に対して複数のプロパティ変更を一度に行っています。各プロパティは、With
ステートメント内でピリオドを使って直接指定されています。
このWith...End With
ステートメントの使用により、オブジェクトの名前を繰り返し記述する手間を省き、コードの可読性を高めることができます。また、複雑なオブジェクトの表現を簡略化し、コードの実行速度を向上させる効果もあります。
例3:複数のエクセルシートに変更を適用する
複数のエクセルシートに同じ設定(例えば、すべてのシートのA1セルの背景色を変更する)を適用する場合、With...End With
を使用して各シートに対する操作を簡単にできます。
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
With ws.Range("A1")
.Interior.Color = RGB(255, 0, 0)
End With
Next ws
このコードは、ワークブック内のすべてのワークシートに対して、A1セルの背景色を赤に変更します。

With...End With
ステートメントを使用すると、同じオブジェクトに対する複数の操作を1回の参照で行うことができ、コードの冗長性を減らし、可読性を向上させることができますよ。