冗長なコードを省略できるWithステートメントの使い方

VBA

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

今回の例ではネストする意味はあまりないのですが、 オブジェクト名が同じであればネストすることでより広い範囲の処理に対応することもできます。

タイトルとURLをコピーしました