Excel VBAで条件分岐をマスターする
音声
目次
If文の基本構文
今回できるようになることとして、If文の基本構文を使ってセルの値に応じた処理を行えるようになることです。
If文(条件分岐)は「条件が真なら処理をする」という考え方で、VBAでは非常に頻繁に出てきます。
最初は1行で書く単純な形から始めると理解が早く、読みやすさを意識すると保守性が上がります。
最小マクロ:
Sub SimpleIf()
Dim v As Variant
v = Range("A1").Value
If v = "OK" Then
MsgBox "処理を続行します"
End If
End Sub
貼り付け場所:標準モジュール(VBEで挿入→モジュール)に貼り付けます。
初めての場合はブックをマクロ有効形式(.xlsm)で保存すると実行できるようになります。
最初の例は10行程度で、Ifの基本が分かれば読み書きが楽になります。
If...Then...Else文の使い方
If...Then...Else文(条件に応じて分岐して別の処理をする構文)は、処理パターンが2つ以上あるときに使います。
単純な例では、セルの数値が基準を超えたら合格メッセージ、そうでなければ不合格メッセージを表示する、といった流れです。
ElseIfを使うことで複数段階の判定も自然に書けます。
次のコードはIf...Then...ElseとElseIfの組み合わせ例です。
Sub GradeCheck()
Dim score As Integer
score = Range("B2").Value
If score >= 90 Then
MsgBox "優"
ElseIf score >= 75 Then
MsgBox "良"
ElseIf score >= 60 Then
MsgBox "可"
Else
MsgBox "不可"
End If
End Sub
実行方法:VBE(Visual Basic Editor)でサブルーチン内にカーソルを置きF5で実行するか、シートにフォームコントロールのボタンを配置してボタンにマクロを割り当てることで実行できます。
マクロを有効にしていないブックでは動作しないため、.xlsm形式で保存することを忘れないでください。
確認方法:処理前にセルの値(この例ではB2)を変えて、表示されるMsgBoxの文言や対象セルの値の変化で期待どおりに分岐しているかを確認します。
複数条件の組み合わせ(And、Or、Not)
複数条件が必要な場面ではAnd(かつ)やOr(または)、Not(否定)を組み合わせて表現します。Andはすべての条件が真のときだけ真になり、Orはどれか一つが真なら真になります。Notは条件の真偽を反転させるため、存在チェックや除外条件で役に立ちます。括弧で条件を明示的にまとめると可読性が高くなります(可読性はバグの発生を減らします)。
次は複合条件の例で、範囲チェックとステータス判定を同時に行います。
Sub MultiCondition()
Dim val As Long
val = CLng(Range("C3").Value)
If val >= 1 And val <= 100 And Not IsEmpty(Range("D3").Value) Then
MsgBox "有効な入力です"
Else
MsgBox "入力を確認してください"
End If
End Sub
よくあるミスとして、条件式でセル参照や関数の型が想定と違う場合に、比較が常にFalseになったり型不一致エラーが出たりすることがあります。直し方は、CLngやCStrなどで型変換を明示し、IsEmptyやIsNumericで前処理を入れることです。
Select Case文と使い分けの基準
Select Case文(複数値の分岐)は、対象の値が取り得る候補が明確に決まっているときに見やすく書けます。
複雑な数式や範囲判定が中心の場合はIf系の方が柔軟ですし、複数の論理条件を組み合わせると可読性が落ちるため使い分けが重要です。
以下は文字列や数値の候補ごとに処理を分ける代表例です。
Sub ExampleSelectCase()
Dim s As String
s = Trim(Range("E1").Value)
Select Case s
Case "Start"
MsgBox "開始処理"
Case "Stop"
MsgBox "終了処理"
Case "Pause"
MsgBox "一時停止"
Case Else
MsgBox "想定外のコマンド"
End Select
End Sub
使い分けの基準:一般的には「候補が値の集合で決まっている場合はSelect Case、範囲判定や複雑な論理はIf/Else」を基準にすると迷いが少なくなります。
また、Range vs Cellsの参照はコードの可読性を優先して使い分けるとよく、Range("A1")は固定セル、Cells(row, col)はループ処理で有利です。
ValueとValue2は通常どちらでも使えますが、日付や通貨の正確な扱いを重視する場合はValueを使う習慣が多いです。
注意(ここだけ)
- 最小マクロ:マクロを実行する前に、ブックを.xlsmで保存してマクロを有効にしてください。
要約
- If文は「条件が真なら処理」を書く基本で、まずは単純な形から慣れるとよいです。
- If...Then...Elseは複数の処理分岐に向き、ElseIfで段階的に判定できます。
- And/Or/Notで複数条件を組み合わせる際は型変換や前処理を入れて堅牢にします。
- Select Caseは候補が限られる分岐で見やすく、範囲判定や複雑論理はIf系が適します。
- 実務では貼り付け場所(標準モジュール)、マクロ有効形式、実行方法(VBEのF5やシートボタン)、確認方法(セルの値とMsgBox)を揃えてから試すとスムーズです。