VBAにおける条件分岐の「真実」
皆さん、こんにちは。VBA講師の私です。これまでIF関数(正確にはIFステートメント)の基本を学んできましたが、今回は実務で最も差がつく「条件の重ね方」について解説します。初心者の方はIFの中にIFを入れ子(ネスト)にしてしまいがちですが、コードが複雑化する原因はそこにあります。
入れ子地獄を回避する「ガード節」という考え方
実務の現場では「AかつBかつC」という複雑な条件を判定することが多いですよね。例えば「売上が目標達成、かつ顧客ランクがA、かつクレーム履歴がない場合」といったケースです。これをすべてIFで囲うと、コードが右へ右へと深くなり、可読性が著しく低下します。
そこで活用してほしいのが「ガード節」というテクニックです。これは「条件を満たさない場合」を先に判定して、すぐに処理を終了(Exit Sub)させる手法です。
具体的な事例で比較する
例えば、入力値チェックを行う場面を想像してください。
悪い例:
IF セルが空ではない THEN
IF セルが数値である THEN
‘ここにメインの計算処理を書く
ELSE
MsgBox “数値を入力してください”
END IF
ELSE
MsgBox “値を入力してください”
END IF
これではメインの処理がどんどん右に追いやられますね。これをガード節で書き直すとこうなります。
良い例:
IF セルが空 THEN MsgBox “値を入力してください”: Exit Sub
IF NOT IsNumeric(セル) THEN MsgBox “数値を入力してください”: Exit Sub
‘ここにメインの計算処理を書く
なぜこの書き方が「実務向け」なのか
この書き方のメリットは、「正常系をメインの左端に配置できる」ことにあります。人間は左から右へ文字を読みます。メインのロジックが常に左端にあることで、コードの全体像を瞬時に把握できるようになります。
実務において、コードは「書く時間」より「読み返す時間」の方が圧倒的に長いです。自分が半年後にこのコードを見たとき、どこが核心部分なのか一目でわかるように書く。これができる人が、現場で重宝されるVBAエンジニアです。
次回は、IF文で書ききれないほど条件が増えた時に使う「Select Case文」についてお話しします。これも実務では必須のスキルですよ。それでは、各自の業務データでガード節が使えないか試してみてください。
