【Excelマクロ】同じものをまとめる With

Excelマクロ

同じ場面を効率的に処理する方法:Withステートメントの活用

マクロを組んでいくと、同じ処理が何度も出てくることがあります。

例えば、次のようなケースです。

  1. 同じセルに対して複数の処理を行う場合
  2. 同じシートに対して複数の処理を行う場合

これらの処理をそのまま記載すると、何度も「同じセル」や「同じシート」を指定するため、コードが長くなりがちで、メンテナンス性が低下します。

この問題を解消するのが 「Withステートメント」 です。

同じセルに対して複数の処理を行う

たとえば、セル A1 に対して以下の処理を行うとします。

  • 背景色を黒にする
  • 文字色を白にする
  • セル全体を罫線で囲む

通常は、これを次のように記述します。

Cells(1, 1).Interior.Color = RGB(0, 0, 0)  ' 背景色を黒にする
Cells(1, 1).Font.Color = RGB(255, 255, 255)  ' 文字色を白にする
Cells(1, 1).Borders.LineStyle = xlContinuous  ' 罫線を引く

この場合、見ていただいている通り、Cells(1, 1) の指定が繰り返されているため、コードが長くなってしまっています。こういった場合に便利なのが Withステートメント です。

Withステートメントの使い方

Withステートメント を使うと、何度も出てくる「Cells(1, 1)」(指定するものをオブジェクトと呼びます)を1度だけ指定し、それ以降のプロパティやメソッドを簡潔に記述できます。

書き方は次の通りです。

1.With の横にオブジェクトを指定します。
2.With〜End With の間に、オブジェクトに関連する処理を記載します。
3.オブジェクトに続くプロパティやメソッドを「.(ドット)」で繋ぎます。

    先ほどのコードを Withステートメント を使って書き直すと、次のようになります。

    With Cells(1, 1)
        .Interior.Color = RGB(0, 0, 0)  ' 背景色を黒にする
        .Font.Color = RGB(255, 255, 255)  ' 文字色を白にする
        .Borders.LineStyle = xlContinuous  ' 罫線を引く
    End With

    このようにCells(1, 1) の指定を1度だけ記載すればよくなり、コードがスッキリします。

    同じシートに対して複数の処理を行う

    Withステートメントはオブジェクトを複数回使う場合に使えるものなので、セルだけでなく、シートを指定することもできます。

    たとえば、シートに対して次のような操作を行うとします。

    • シート名を「一覧」に設定する
    • シートの背景色を灰色にする
    • シートのセル A1 に「データ」と入力する

    通常は次のように記述します。

    Sheets(1).Name = "一覧"
    Sheets(1).Tab.Color = RGB(200, 200, 200)
    Sheets(1).Cells(1, 1).Value = "データ"

    これも Withステートメント を使うと、次のように簡潔に記述できます。

    With Sheets(1)
        .Name = "一覧"  ' シート名を設定
        .Tab.Color = RGB(200, 200, 200)  ' シートの背景色を灰色に
        .Cells(1, 1).Value = "データ"  ' セルA1に「データ」と入力
    End With

    まとめ

    • Withステートメント を使うことで、同じオブジェクトを何度も記述する必要がなくなり、コードが読みやすくなります。
    • CellsSheets だけでなく、他のオブジェクトにも活用可能です。
    • 複数のプロパティやメソッドを扱う際には、積極的に Withステートメント を使用しましょう。

    おすすめポイント

    • 複雑な処理がスッキリまとまる
    • コードのミス(オブジェクト指定忘れなど)が減る
    • 可読性と保守性が向上する

    ぜひ、さまざまな場面で Withステートメント を活用してみてください!

    コメント