Excel VBAを掌握する極限の知見:If文の「迷宮」から脱出し、論理を美しく制御せよ
こんにちは。現場で泥臭い自動化から大規模なシステム連携まで見てきたチーフアーキテクトです。
マクロの記録から脱却し、「コードを書く」段階に入ったあなたが最初に直面する壁。それは間違いなく「If文の複雑化」です。画面が真っ白になるような長いIf文や、ネスト(入れ子)が深すぎてどこで閉じているのか分からないコード。これらはメンテナンスという名の地獄への入り口です。
今日は、プロが現場で当たり前のように使っている「Boolean(真偽値)を操る論理の最適化」について、その神髄を伝授します。
—
1. 汚いコードの正体:If文の「ネスト」を捨てよ
まず、よくある「初心者卒業直前」のコードを見てみましょう。
‘ 【悪い例】条件が複雑になると、どこで何をしているか分からなくなる
If Cells(i, 1).Value <> “” Then
If Cells(i, 2).Value > 100 Then
If Cells(i, 3).Value = “完了” Then
‘ 処理を実行
End If
End If
End If
この書き方の何が悪いか? 「条件」と「処理」が密接に絡まりすぎている点です。これでは、条件が一つ増えるだけでコードの行数が倍に膨らみ、可読性はゼロになります。
—
2. 極意:条件を「Boolean変数」に格納して名前を付ける
プロのコードは、条件を独立した「変数」として定義します。これを専門用語で「フラグの抽象化」と呼びます。
‘ 【良い例】条件を言葉(変数名)にして整理する
Dim isInputValid As Boolean
Dim isTargetValue As Boolean
Dim isStatusClosed As Boolean
‘ 条件をBoolean変数に格納(名前で何をしているか一目で分かる)
isInputValid = (Cells(i, 1).Value <> “”)
isTargetValue = (Cells(i, 2).Value > 100)
isStatusClosed = (Cells(i, 3).Value = “完了”)
‘ 判定はシンプルに
If isInputValid And isTargetValue And isStatusClosed Then
‘ ここで初めて処理を実行
End If
なぜこれが強力なのか?
1. 可読性: `isInputValid` という名前だけで「あ、これは入力チェックをしているんだな」と瞬時に理解できます。
2. 再利用性: `isInputValid` を他のIf文でも使い回すことができます。
3. デバッグ: 途中で `Debug.Print isInputValid` を挟めば、どこで判定が外れたのかが一目瞭然です。
—
3. 伝説の知見:VBAの「短絡評価」を使いこなす
ここで一つ、重要な知識を共有します。VBAは「短絡評価(ショートサーキット)」という特性を持っています。
例えば、`A And B` という判定があるとき、AがFalseであれば、VBAはBの中身を見ずに処理を打ち切ります。
これを利用すると、パフォーマンスと安全性を両立できます。
‘ 【実用例】エラー回避の短絡評価
‘ もしセルが空なら、エラーになる可能性がある計算をスキップする
If Not IsEmpty(Cells(i, 1).Value) Then
If Cells(i, 1).Value > 0 Then ‘ ここは前の条件がTrueの時だけ実行される
‘ 高負荷な処理
End If
End If
初心者が陥りやすいミス:
「全部まとめて判定しよう」として `If Cells(i,1).Value <> “” And Cells(i,1).Value > 0 Then` と書くと、セルが空の時に右側の判定で「型不一致エラー」や「実行時エラー」が発生することがあります。「安全な条件」を先に書くのが、現場のエンジニアの鉄則です。
—
4. 結論:コードは「読み手」のために書くもの
あなたが書いたコードを、半年後の自分や、あなたのチームメイトが読むかもしれません。その時、複雑なIf文の迷路に迷い込ませないこと。それが、良いエンジニアの最初の条件です。
- Boolean変数を活用し、条件に名前を付ける。
- ネストを深くせず、フラットに記述する。
- 短絡評価を意識し、安全な判定順序を設計する。
この3つを意識するだけで、あなたのVBAコードは一気にプロの領域へ足を踏み入れます。
「ここをクリアすれば、Excel VBAの基本はバッチリ」です。まずは明日から、複雑なIf文を一つずつBoolean変数に置き換えるところから始めてみてください。あなたの書くコードが、美しく洗練されたものになることを楽しみにしています。
また次回の講義で会いましょう。健闘を祈ります。
