Withステートメントの解説をしていきます
Withステートメントとは
1つのオブジェクトに対して複数の処理を行いたい場合があります。
例えばRangeオブジェクトで指定した範囲にある文字列に対して
・文字色
・太字
・イタリック
・アンダーライン
等を設定すると下記のようなコードとなります。
Sub test()
Range("A1", "C3").Font.Color = -16776961
Range("A1", "C3").Font.Bold = True
Range("A1", "C3").Font.Italic = True
Range("A1", "C3").Font.Underline = xlUnderlineStyleSingle
End Sub
※コードの見方
白・・・コード
紫・・・コメント
青・・・プロシージャの宣言
その他・・・コードを見やすくするために使うかも
白・・・コード
紫・・・コメント
青・・・プロシージャの宣言
その他・・・コードを見やすくするために使うかも
見ていただければわかる通り、同じ記述が多数ありとても面倒です。このような手間を省いて記述することができるのがWithステートメントです。
Withステートメントの記述方法
Withステートメントの記述方法についてお話します
Withステートメントの書式は下記のとおりです。
Sub test()
With オブジェクト名
処理
End With
End Sub
Withの後にオブジェクト名を指定して、そのあとに処理を記述します。先ほどの例で紹介したプロシージャを例にしてみていきます。
前述しためんどくさいコードです。
Sub test()
Range("A1", "C3").Font.Color = -16776961
Range("A1", "C3").Font.Bold = True
Range("A1", "C3").Font.Italic = True
Range("A1", "C3").Font.Underline = xlUnderlineStyleSingle
End Sub
このコードをWithステートメントを利用して記述すると下記のようになります。
Sub test()
With Range("A1", "C3").Font //①
.Color = -16776961 //➁
.Bold = True
.Italic = True
.Underline = xlUnderlineStyleSingle
End With
End Sub
①すべての行で記述していたオブジェクト名『 Range(“A1”, “C3”).Font 』を最初に指定して記述することで、ほかの行では省略することができました。
➁Withステートメントで囲った場合は各処理は(.)ピリオドから始まることに注意してください。
このようにWithステートメントを利用することで同じ範囲指定をしている箇所の記述をまとめることができコードを省略して記述することができます。
Withステートメントはネスト(入れ子)にすることもできる
Withステートメントはネストして記述することができます。
先ほどの例ではフォントのみでしたが、背景色もまとめて変えてみます。
Sub test8()
With Range("A1", "C3")
.Interior.Color = 65535
With .Font
.Color = -16776961
.Bold = True
.Italic = True
.Underline = xlUnderlineStyleSingle
End With
End With
End Sub
今回の例ではネストする意味はあまりないのですが、 オブジェクト名が同じであればネストすることでより広い範囲の処理に対応することもできます。