VBAを書いていると、「もっと短く書けないだろうか」と考えることはありませんか。
実際、VBAには1行で書ける構文や、コード量を減らせる書き方が数多くあります。そのため、コードが短いほど優れたプログラムだと思われがちです。
しかし、実務ではコードを書く時間よりも、コードを読む時間や修正する時間の方が圧倒的に長くなります。
私自身も、以前はできるだけ短く書くことを意識していました。しかし、数か月後に自分でコードを見返したとき、「何を考えてこの処理を書いたのか分からない」と悩むことが何度もありました。
それ以降は、「短いコードを書くこと」ではなく、「誰が見ても理解できるコードを書くこと」を優先するようになりました。
この記事では、なぜ実務では短いコードよりも読みやすいコードが重要なのか、実際の開発現場で意識している設計の考え方を紹介します。
✅ 短いコードが必ずしも良いコードではない理由
プログラミングを始めたばかりの頃は、「コードは短いほど優秀」と考えてしまいがちです。
確かに、不要な処理を減らすことは大切です。しかし、必要以上にコードを短くすると、可読性や保守性が大きく低下することがあります。
実務では、一度完成したコードを何度も修正・流用するため、「短さ」よりも「理解しやすさ」が重要になります。
・読む時間の方が圧倒的に長い
VBAは、一度作って終わるものではありません。
例えば、
- 新しい機能を追加する
- 不具合を修正する
- 他の業務へ流用する
- 他の担当者へ引き継ぐ
といった場面では、まずコードを読むことから始まります。
つまり、コードを書く時間よりも、読む時間の方が圧倒的に長くなるのです。
そのため、「短く書けたか」ではなく、「すぐ理解できるか」を基準に設計した方が、結果として開発効率は高くなります。
・数か月後の自分も「他人」になる
実務で意外と多いのが、「自分が書いたコードなのに理解できない」というケースです。
私も以前、数か月前に作成したVBAを修正する機会がありました。
当時は「これ以上短く書けない」と満足していたコードでしたが、いざ見返してみると、
- なぜこの変数を使っているのか
- この条件分岐は何を判定しているのか
- なぜこの順番で処理しているのか
が分からず、結局コードを読み直すことになりました。
この経験から、「未来の自分も他人だ」と考え、後から見ても理解できるコードを書くことを意識するようになりました。
・短く書くほどコメントも減りやすい
コードを1行へまとめると、コメントを書く場所も少なくなります。
すると、
If x = 1 Then Call ProcessA Else Call ProcessB
のように、動作は理解できても「なぜこの処理をしているのか」が分からないコードになりやすくなります。
実務では、処理内容よりも処理の目的を理解できることの方が重要です。
そのため、適度に改行し、コメントも添えながらコードを書く方が保守しやすくなります。
コードを短く書くことよりも、後から修正しやすい構成を意識する考え方は、Selectを使わない設計にも共通しています。保守性を高める実務的な考え方については、「【VBA】なぜ私はSelectを使わなくなったのか|保守しやすいコードを書く考え方」もぜひご覧ください。
✅ 私が読みやすさを優先するようになったきっかけ
今では、コードを書くときに「短く書けるか」を考えることはほとんどありません。
それよりも、「半年後の自分が理解できるか」「他の担当者が修正できるか」を基準にしています。
この考え方になったのは、実際の業務で何度も失敗を経験したからです。
・修正に時間がかかるコードを何度も見てきた
以前の私は、
- If文を1行で書く
- 変数を極力減らす
- 処理を詰め込む
ことが効率的だと思っていました。
しかし、実際には処理を追加するたびにコード全体を読み直す必要があり、修正のたびに時間がかかるようになってしまいました。
短く書いたことで、かえって開発効率を下げていたのです。
・レビューで指摘されたのはコードの長さではなかった
社内レビューや他の開発者とのやり取りでは、
「コードが長い」
と指摘されることはほとんどありませんでした。
代わりによく言われたのが、
- 処理の意図が分からない
- 変数名が分かりにくい
- コメントを追加してほしい
- 条件分岐を整理した方が良い
という内容です。
この経験から、実務ではコードの長さではなく、「読みやすさ」が評価されることを実感しました。
✅ 読みやすいコードは仕様変更にも強い
VBAは、完成した瞬間がゴールではありません。
業務内容が変われば、コードも必ず変更することになります。
そのため、最初から仕様変更を想定した設計にしておくことが重要です。
・変数名だけでも理解しやすさは変わる
例えば、
Dim x As String
よりも、
Dim departmentName As String
の方が、何を格納している変数なのか一目で分かります。
変数名を意味のある名前にするだけでも、コード全体の理解しやすさは大きく向上します。
・処理を詰め込みすぎないことも保守性につながる
実務では、後から処理を追加することが非常に多くあります。
そのため、
- 適度に改行する
- コメントを書く
- 処理をまとめる
- 役割ごとに整理する
といった基本的なことが、結果として保守性の高いコードにつながります。
読みやすいコードを書くためには、処理内容だけでなく変数名の付け方も重要です。実務で分かりやすい命名規則については、「【VBA】変数名の付け方|キャメルケース・スネークケースなど命名規則を徹底解説」で詳しく解説しています。
✅ 私が現在意識しているコード設計
現在はコードを書くときに、「何文字で書けるか」ではなく、「半年後でもすぐ理解できるか」を最初に考えるようにしています。
実務では、一度作ったVBAを何度も修正したり、別の業務へ流用したりすることがほとんどです。そのため、最初から保守性を意識した設計にしておく方が、結果的に作業時間を短縮できます。
・処理内容が分かる変数名を付ける
以前は、
Dim x As String
Dim a As Long
のように短い変数名を使うこともありました。
しかし現在では、
Dim departmentName As String
Dim lastRow As Long
Dim targetWorkbook As Workbook
のように、変数名だけで役割が分かる名称を付けるようにしています。
・なぜこの書き方にしているのか
短い変数名は入力する手間を減らせますが、数週間後には「xは何を表していたのか」を思い出すところから始まります。
一方で意味のある名前なら、コードを読むだけで処理内容を理解しやすくなります。
実務ではタイピング時間よりも読解時間の方が圧倒的に長いため、多少長い名前でも可読性を優先した方が結果的に効率的です。
・実務で気を付けているポイント
変数名は「型」ではなく「役割」が分かる名前を付けています。
例えば、
departmentNamecustomerNameoutputFolderPathsalesWorksheet
など、用途がすぐ分かる名称にすることで、仕様変更時の修正ミスも減らせます。
✅ コードを書く前に「処理の流れ」を考える
以前は思い付いた順番にコードを書き始めることもありました。
しかし現在では、処理の流れを整理してから実装するようにしています。
・いきなりコードを書かない
例えばCSVを取り込む処理であれば、
- 対象ファイルを取得する
- ファイルが存在するか確認する
- CSVを開く
- データを読み込む
- Excelへ出力する
- ファイルを閉じる
という流れを先に考えます。
その後で各処理をコードへ落とし込むようにしています。
・この考え方のメリット
処理全体を整理してから実装すると、
- 処理漏れ
- 同じコードの重複
- エラー処理の抜け
などに気付きやすくなります。
また、仕様変更が発生した場合でも、「どこを修正すればよいか」が分かりやすくなります。
実務では、処理の流れを整理してから実装することで、条件分岐やデータ抽出も保守しやすくなります。具体的な実装例については、「【VBA】条件に合うデータを抽出する方法|For文・IF文で実務データを自在に扱う」も参考にしてください。
✅ 短いコードを目指して失敗した経験
読みやすさを重視するようになったのは、実際に失敗を経験したからです。
今でも印象に残っている出来事があります。
・1行へまとめたことで修正が難しくなった
以前、条件分岐をできるだけ短く書こうと考え、
- If文を1行で書く
- コロン(
:)で複数命令を並べる - ネストを減らすことだけを意識する
という書き方をしていました。
当時は「コード量が減った」と満足していました。
しかし数か月後、その処理へログ出力を追加することになり、結局すべて通常の書き方へ戻すことになりました。
短く書くことを優先した結果、後から修正する手間が増えてしまったのです。
・「書く時間」より「直す時間」の方が長かった
実際の業務では、
- 新しい機能追加
- 不具合修正
- 他部署向けへの流用
などが何度も発生します。
そのたびに短く書いたコードを読み解く必要があり、「最初に数分短縮した時間」よりも、「後から数時間かけて修正する時間」の方がはるかに長くなっていました。
この経験から、短さではなく保守性を優先する考え方へ変わりました。
コードを短くしようとして無理に条件をまとめると、ネストが深くなり読みづらくなることがあります。ネストを避ける考え方については、「【VBA】ネスト(入れ子)とは?IF文を正しく使うための基本と実務判断」もあわせてご覧ください。
✅ 保守性を高めるために意識していること
読みやすいコードを書くために、現在は次のような点を意識しています。
・コメントは「何をしているか」ではなく「なぜするか」を書く
例えば、
' 最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
よりも、
' データ件数は毎月変わるため、最終行を動的に取得する
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
のように、処理の目的を書くようにしています。
これだけでも、後から見返したときの理解しやすさは大きく変わります。
・処理ごとに区切って書く
長いコードを1つの塊で書くのではなく、
- データ取得
- 入力チェック
- メイン処理
- 後処理
というように区切って記述しています。
処理単位が明確になるため、レビューや修正もしやすくなります。
・流用できる構成を考える
「今回だけ動けばよい」という考えではなく、
- 他のブックでも使えるか
- シート名が変わっても対応できるか
- 保存先が変わっても修正しやすいか
を意識して設計しています。
この考え方が、結果として再利用性の高いVBAにつながっています。
保守性を高めるには、条件式そのものも読みやすく整理することが重要です。複雑な条件を分かりやすく記述する方法については、「【VBA】IF文の括弧を用いた複数条件|可読性と誤判定を防ぐ設計手法」で詳しく紹介しています。
✅ 私が実務で判断するときの基準
コードを書くときに迷ったら、私は次のように考えるようにしています。
- 半年後の自分が読めるか
- 他の担当者でも理解できるか
- コメントがなくても役割が分かるか
- 仕様変更があっても修正しやすいか
- 同じコードを書き直さずに流用できるか
もしどれか一つでも不安があるなら、多少コードが長くなっても読みやすい形へ書き直します。
実務では、その判断が後々の開発効率を大きく左右すると考えています。
実務では、条件分岐の書き方一つでも保守性は大きく変わります。読みやすく壊れにくい条件分岐の設計については、「【VBA】IF文のElseIfを用いた複数条件|ネストを防ぎ実務で壊れない条件分岐を書く方法」も参考にしてください。
「読みやすいコード」を実際の条件分岐でどのように実現するかを知りたい方は、「【VBA】Select Caseで文字列を判定する方法|複数条件を見やすく分岐する実務テクニック」もぜひご覧ください。
✅ まとめ:読みやすいコードは未来の自分とチームを助ける
この記事では、短いコードよりも読みやすいコードを優先する理由について、実務での経験を交えながら紹介しました。
- コードを書く時間よりも読む・修正する時間の方が長い
- 短く書き過ぎると可読性や保守性が低下しやすい
- 意味のある変数名やコメントは理解しやすさにつながる
- 処理の流れを整理してから実装すると仕様変更にも対応しやすい
- コメントには「何をするか」ではなく「なぜするか」を残す
- 「半年後の自分が理解できるか」を基準に設計すると保守性が高まる
VBAは、「動けば完成」ではなく、「将来も安心して修正・流用できる状態」が本当の完成形だと私は考えています。多少コードが長くなったとしても、読みやすさと保守性を優先することが、長期的には開発効率を高め、トラブルの少ないシステムづくりにつながります。