【VBA】コードの視認性が劇的に向上!「Withステートメント」で冗長な記述を卒業しよう

【業務効率化】VBA
スポンサーリンク

はじめに:コードの記述量に圧倒されていませんか?

「Worksheets(“Sheet1”).Range(“A1”)…」といった長い記述を何度も繰り返していると、コードの本質的な役割が見えにくくなってしまいます。

今回は、そんな「コードが煩雑で読みづらい」「同じ記述を何度も書くのが手間に感じる」という悩みを解決する、VBAの「Withステートメント」について解説します。

これを習得すれば、記述量が削減されるだけでなく、プログラムの処理速度向上も期待できる「一石二鳥」のテクニックとなります。

【業務効率化】VBAの記事を見る

Withステートメントとは?

簡潔に言えば、「特定の対象(オブジェクト)」を最初に宣言することで、以降の記述において主語を省略できる構文です。

例えば、日常生活で以下のような話し方をすると、少し冗長に感じられますよね。

  • 「佐藤さんは、営業部所属です」
  • 「佐藤さんは、Excelが得意です」
  • 「佐藤さんは、甘いものが好きです」

これを、

「佐藤さんについて:」

  • 「営業部所属です」
  • 「Excelが得意です」
  • 「甘いものが好きです」
    と要約するのが「With」の役割です。英文法における「代名詞」や「主語の省略」に近い感覚で捉えると分かりやすいでしょう。

導入前後の比較(Before / After)

実務でよくある「セル範囲(A1:E1)の見出しを装飾する」コードで、その違いを比較してみましょう。

【Before】Withを使わない場合(修正前)

同じセル範囲を何度も記述するため、入力の負担が大きく、コードの全体像も把握しづらくなります。

Sub FormatHeader_Bad()
    ' 背景色を黄色にする
    Range("A1:E1").Interior.Color = vbYellow
    ' 文字を太字にする
    Range("A1:E1").Font.Bold = True
    ' 文字を中央揃えにする
    Range("A1:E1").HorizontalAlignment = xlCenter
    ' 罫線を引く
    Range("A1:E1").Borders.LineStyle = xlContinuous
End Sub

【After】Withを使った場合(修正後)

いかがでしょうか。対象範囲の記述が一度で済むため、コード全体が非常にすっきりと整理されました。

Sub FormatHeader_Good()
    ' A1からE1の範囲について、一括で設定を適用
    With Range("A1:E1")
        .Interior.Color = vbYellow      ' 「.(ドット)」から記述を開始できる
        .Font.Bold = True
        .HorizontalAlignment = xlCenter
        .Borders.LineStyle = xlContinuous
    End With
End Sub

なぜWithを使うべきなのか?

Withステートメントの導入には、主に2つの大きなメリットがあります。

1. メンテナンス性が飛躍的に高まる
例えば、対象範囲を「A1:E1」から「A1:F1」へ変更する場合、Beforeの書き方では4箇所の修正が必要です。しかしWithを使えば、冒頭の1箇所を書き換えるだけで済み、修正漏れによるミスも防げます。

2. プログラムの実行速度が向上する
Withステートメントは対象となるオブジェクトに対して一度だけ参照を行うため、コンピュータのリソース効率が向上します。

毎回「佐藤さん!」と呼び止めて用件を一つずつ伝えるより、一度の呼び出しでまとめて伝えるほうが効率的なのと同様の理屈です。数万件のデータを扱うような大規模なプログラムでは、この僅かな差が大きなパフォーマンスの差として現れます。

実務で役立つ実践サンプルコード

最後に応用編として、Excel作業で頻出する「入力欄の強調表示」を自動化するコードを紹介します。

Sub HighlightInputArea()
    ' B2セルの入力欄を視覚的に強調する
    With Range("B2")
        .Value = "ここに氏名を入力"            ' 初期テキストの設定
        .Interior.Color = RGB(220, 230, 241) ' 背景を淡い青色に設定
        .Font.Color = vbRed                  ' 文字色を赤に設定
        .Font.Bold = True                    ' 太字に設定
        .Borders.LineStyle = xlContinuous    ' 枠線を適用
    End With
    MsgBox "入力欄の作成が完了しました。"
End Sub

おわりに

プログラミングの上達には、「いかに効率よく、楽に作業を完結させるか」という探究心が欠かせません。「With」を使いこなし、コードも思考もスマートに整理整頓していきましょう!

【業務効率化】VBAの記事を見る


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

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