VBAで条件分岐を作成していると、「この条件では何も処理しない」という場面に必ず出会います。
例えば、未入力データは無視する、特定の状態のときだけ次へ進める、エラー対象だけ除外する、といったケースです。
しかし実務では、「何もしない」分岐をどう書くかによって、
可読性・保守性・将来の修正のしやすさが大きく変わります。
特に、ElseIf を使った条件分岐では、
- 空の
ElseIfを書くべきか - コメントだけ残すべきか
- 条件を逆転させて整理すべきか
といった判断が必要になります。
この記事では、
VBAでElseIfを用いて何も処理しない方法について、
単なる書き方ではなく、
「なぜ何もしないのかを明確にする設計」
という実務視点で徹底解説します。
目次
- ✅ VBA IF文でElseIfを用いて何も処理しない基本パターン
- ・ElseIfで何も処理しない基本例
- ・ なぜこの書き方にしているのか
- ・ 別の書き方との比較
- ・ 実務での典型的な使用場面
- ✅ 「何もしない」分岐を設計として明確にする重要性
- ・設計意図を明確にした例
- ・ 実務でよくある事故
- ・ 実務での判断基準
- ✅ ElseIfを使って「スキップ条件」を整理する設計
- ・スキップ条件を先に書く設計
- ・ なぜこの順序が重要なのか
- ・ 別の設計との比較
- ・ 実務での基本原則
- ✅ ElseIfで「何もしない」より安全な代替設計(条件を逆転する)
- ・処理対象だけを書く設計
- ・ この設計のメリット
- ・ 実務での重要な判断
- ✅ 「何もしない」処理を明示するためのコメント設計
- ・良いコメント例
- ・ 悪いコメント例
- ・ 実務でのルール
- ✅ Continueの代替としてElseIfを使う設計
- ・ループ内でのスキップ例
- ・ なぜこの書き方にしているのか
- ・ 実務での注意点
- ✅ VBAで「何もしない」設計が必要になる典型パターン
- ・典型パターン一覧
- ・ 実務での共通点
- ・ 最も多い失敗
- ✅ まとめ:VBA IF文でElseIfを用いて何も処理しない設計を理解しよう
✅ VBA IF文でElseIfを用いて何も処理しない基本パターン
VBAの条件分岐では、「何もしない」という状態を意図的に作ることがあります。しかし、単に空白のままにしてしまうと、後から見た人が「書き忘れなのか」「意図的なのか」を判断できなくなります。これはチーム開発や長期運用の現場では非常に危険です。また、仕様変更時に誤って処理を追加してしまう原因にもなります。つまり、「何もしない」という処理こそ、明確な意図を持って設計する必要があります。ここではまず、最も基本となる書き方から確認していきましょう。
・ElseIfで何も処理しない基本例
Sub CheckStatus()
Dim statusValue As String
statusValue = Range("A1").Value
If statusValue = "完了" Then
MsgBox "処理を実行します"
ElseIf statusValue = "保留" Then
' 何も処理しない(意図的にスキップ)
Else
MsgBox "未対応の状態です"
End If
End Sub
・ なぜこの書き方にしているのか
このコードでは、
「保留」の状態では何も処理しないことが仕様として存在している
ことを明示しています。
重要なのは:
- 空白ではなく
- コメントで意図を残している
という点です。
・ 別の書き方との比較
例えば、次のように完全に空にすることもできます。
ElseIf statusValue = "保留" Then
Else
しかし、この書き方には問題があります。
- 書き忘れに見える
- 意図が分からない
- 将来の修正で事故が起きる
そのため実務では、
「何もしない」ことをコメントで明示する
これが基本になります。
・ 実務での典型的な使用場面
例えば:
- 保留データは処理対象外
- 空白行はスキップ
- 無効データは無視
- 一時停止状態は待機
これらはすべて:
何もしないことが正しい処理
です。
✅ 「何もしない」分岐を設計として明確にする重要性
多くの人は「何もしない」処理を軽く考えがちですが、実務ではこの部分が最も事故を起こしやすい箇所のひとつです。特に、条件分岐が増えてくると、「本来処理しないべきデータ」に対して誤って処理が実行されることがあります。また、仕様変更時に「ここは何もしない予定だった」という前提が失われることもあります。つまり、「何もしない」という判断には必ず理由があります。その理由をコードに残しておくことが、長期運用では非常に重要になります。
・設計意図を明確にした例
ElseIf statusValue = "" Then
' 空白データは入力待ちのため処理しない
・ このコメントの役割
この1行のコメントによって:
- 仕様が分かる
- 意図が伝わる
- 修正判断ができる
ようになります。
・ 実務でよくある事故
例えば:
ElseIf statusValue = "" Then
だけが書かれている場合:
- 未入力をエラーとして処理してしまう
- 意図せず削除してしまう
- 誤って通知を送ってしまう
こうした事故が実際に起きます。
・ 実務での判断基準
次のルールが有効です。
- 何もしない理由を書く
- 将来の判断材料を残す
- 意図をコードに埋め込む
✅ ElseIfを使って「スキップ条件」を整理する設計
実務では、「処理する条件」よりも「処理しない条件」の方が多いことがあります。例えば、100件のデータのうち、実際に処理するのは10件だけというケースです。このような場合、スキップ条件を整理しておくことで、コードの読みやすさと安全性が大きく向上します。また、条件が増えても構造を維持しやすくなります。ここでは、スキップ条件を整理する設計について確認していきましょう。
・スキップ条件を先に書く設計
If statusValue = "" Then
' 未入力のため処理しない
ElseIf statusValue = "保留" Then
' 保留中のため処理しない
ElseIf statusValue = "完了" Then
Call ExecuteProcess
Else
MsgBox "不明な状態です"
End If
・ なぜこの順序が重要なのか
理由は:
異常・例外・除外条件を先に処理できる
からです。
・ 別の設計との比較
逆順:
If statusValue = "完了" Then
この場合:
- 例外処理が増える
- 条件が複雑になる
- ネストが深くなる
という問題が起きます。
・ 実務での基本原則
処理しない条件を先に書く
これは非常に重要な設計ルールです。
スキップ条件を整理することで、不要な処理を安全に回避できるようになります。
しかし実務では、そのあと「次の処理へどう進めるか」という判断が非常に重要になります。
条件によって処理を続けるのか、スキップするのか、中断するのか。
この判断を正しく設計することで、エラーや誤処理を大きく減らすことができます。
次の処理へ進むための具体的な書き方や設計パターンについては、
次の記事で実例を交えて詳しく解説しています。
→【VBA】If文を使って次の処理へ進む方法|条件分岐・スキップ・中断の実例解説
✅ ElseIfで「何もしない」より安全な代替設計(条件を逆転する)
場合によっては、「何もしない」分岐を作るよりも、「処理する条件だけを書く」方が安全なことがあります。これは特に、処理対象が限定されている場合に有効です。また、条件が増えていくシステムでは、この設計の方が長期的に安定します。ここでは、条件を逆転させる設計について確認していきましょう。
・処理対象だけを書く設計
If statusValue = "完了" Then
Call ExecuteProcess
End If
・ この設計のメリット
- 分岐が減る
- バグが減る
- 読みやすくなる
・ いつ使うべきか
次の条件に当てはまる場合です。
- 処理対象が限定されている
- 例外が多い
- 条件が増え続ける
・ 実務での重要な判断
何もしない分岐を作るか
処理条件だけを書くか
これは設計判断です。
✅ 「何もしない」処理を明示するためのコメント設計
コードは「動けばよい」ものではありません。特に業務システムでは、「なぜこの条件が存在するのか」を説明できることが重要です。コメントはそのための最も簡単で強力な手段です。また、コメントが適切に書かれているコードは、引き継ぎや改修が非常に容易になります。ここでは、実務で役立つコメントの書き方について確認していきましょう。
・良いコメント例
ElseIf statusValue = "停止" Then
' 管理者の再開指示があるまで処理しない
・ 悪いコメント例
' 何もしない
・ 違い
良いコメント:
- 理由がある
- 条件が分かる
- 判断ができる
悪いコメント:
- 意味がない
- 情報が不足
- 判断できない
・ 実務でのルール
コメントは:
理由を書く
これが最重要です。
✅ Continueの代替としてElseIfを使う設計
VBAには Continue 文がありません。そのため、ループ処理の中で「何もしない」判断を作る必要があります。ここでElseIfを使うことで、安全にスキップ処理を実現できます。この設計は非常に多くの現場で使われています。
・ループ内でのスキップ例
Dim i As Long
For i = 1 To 10
If Cells(i, 1).Value = "" Then
' 空白行はスキップ
Else
Call ProcessRow(i)
End If
Next i
・ なぜこの書き方にしているのか
VBAには:
Continue が存在しない
からです。
・ 実務での注意点
次のような書き方は危険です。
If Cells(i, 1).Value <> "" Then
理由:
- 条件が増えると読みにくくなる
- バグが入りやすい
VBAにはContinueステートメントが存在しないため、
「処理をスキップして次へ進む」動きをどのように書くかは、実務で必ず直面するテーマです。
特に、空白行や無効データを安全に飛ばしたい場面では、
Continueの代替となる書き方を正しく理解しておくことが重要になります。
実際にどのようなコードで「何もしないで次の処理へ進む」動きを実現するのかについては、
次の記事で具体例を交えて詳しく解説しています。
→【VBA】IF文で何もしない処理しない(continueステートメント)
✅ VBAで「何もしない」設計が必要になる典型パターン
「何もしない」判断は、特別なケースではありません。むしろ業務処理の中では日常的に登場します。しかし、その重要性が理解されていないため、トラブルの原因になることが多いのも事実です。ここでは、実務で頻繁に発生する代表的なパターンを整理しておきます。
・典型パターン一覧
- 空白データ
- 無効データ
- 一時停止状態
- 処理済みデータ
- 対象外データ
- エラー対象
・ 実務での共通点
すべて:
処理しないことが正しい
です。
・ 最も多い失敗
それは:
意図を書いていない
ことです。
「何もしない」という設計は、単なる処理の省略ではなく、
どの条件で処理を行い、どの条件で止めるのかを明確にする重要な判断です。
しかし実務では、この判断が曖昧なまま
「とりあえずVBAで自動化してしまう」ことで、
後から修正が難しくなったり、業務全体が不安定になるケースも少なくありません。
そもそもVBAを使うべき場面なのか、
設計段階でどのような判断をしておくべきかについては、
次の記事で具体的な業務パターンとともに解説しています。
→「とりあえずVBA」が危険になる業務パターンと設計の分かれ道
✅ まとめ:VBA IF文でElseIfを用いて何も処理しない設計を理解しよう
- 「何もしない」は重要な処理である
- 空白のままにしない
- コメントで理由を書く
- スキップ条件を先に書く
- 条件を逆転する設計も有効
- Continueの代替として使える
- 保守性は「意図」で決まる
「何もしない」分岐は、単なる空白ではありません。
それは:
仕様を守るための設計
です。
この考え方を理解しておけば:
- バグが減る
- 修正が楽になる
- 引き継ぎが簡単になる
- コードが長く使える
という状態を安定して作れるようになります。