Excel VBA | 複雑な条件を扱う方法

VBA
スポンサーリンク

ここでは Excel VBA で複雑な条件を扱う方法 を、プログラミング初心者向けにかみ砕いて解説し、例題付きで説明します。


1. 複雑な条件とは?

複雑な条件とは、1つの値だけでなく、複数の値や状態を組み合わせて判断する場合を指します。
例えば:

  • 性別 + 年齢 + 職業
  • 点数 + 出席日数
  • 天気 + 気温

このような場合、単純な IfSelect Case だけでは書きにくくなることがあります。


2. 基本的な方法

複雑な条件を扱う方法は主に3つあります。


方法①:If と And / Or を使う

複数条件をまとめて判定できます。

例:性別と年齢で判定

Sub If_AndOr例()
    Dim gender As String
    Dim age As Integer
    
    gender = Range("A1").Value
    age = Range("B1").Value
    
    If gender = "男" And age >= 20 And age <= 30 Then
        MsgBox "若い男性です"
    ElseIf gender = "男" And age >= 31 Then
        MsgBox "年上の男性です"
    ElseIf gender = "女" And age >= 20 And age <= 30 Then
        MsgBox "若い女性です"
    ElseIf gender = "女" And age >= 31 Then
        MsgBox "年上の女性です"
    Else
        MsgBox "不明です"
    End If
End Sub
VB

✅ ポイント:

  • And:両方の条件を満たすとき
  • Or:どちらかの条件を満たすとき
  • ネストが浅くても複雑な判定が可能

方法②:ネストした Select Case を使う

前に説明したように、条件を段階的に分ける方法です。

  • 外側:性別
  • 中間:年齢
  • 内側:職業

これは初心者にとって 条件を整理しやすい方法 です。


方法③:条件を変数や文字列にまとめる

  • 性別・年齢カテゴリ・職業を 1つのキー文字列にまとめて判定
  • ネストを減らし、コードをスッキリ書ける
Dim key As String
key = gender & "_" & ageCategory & "_" & job

Select Case key
    Case "男_若い_学生"
        MsgBox "若い男性の学生です"
    Case "女_中年_会社員"
        MsgBox "中年女性の会社員です"
    Case Else
        MsgBox "不明です"
End Select
VB

3. 練習例:点数と出席日数で成績判定

条件

  • 点数(C1セル)と出席日数(D1セル)で判定
  • ルール:
    1. 点数 >= 80 かつ 出席日数 >= 90 → 「優秀」
    2. 点数 >= 60 かつ 出席日数 >= 75 → 「合格」
    3. それ以外 → 「不合格」

解答例(If And を使用)

Sub 成績判定複雑条件()
    Dim score As Integer
    Dim attendance As Integer
    
    score = Range("C1").Value
    attendance = Range("D1").Value
    
    If score >= 80 And attendance >= 90 Then
        MsgBox "優秀"
    ElseIf score >= 60 And attendance >= 75 Then
        MsgBox "合格"
    Else
        MsgBox "不合格"
    End If
End Sub
VB

✅ ポイント:

  • And を使うことで 複数条件を1つの判定にまとめられる
  • 条件の順番が重要(優先度の高い条件を先に書く)

4. コツと注意点

  1. 条件を整理してからコードを書く
    • 表にして考えるとわかりやすい
  2. 優先度の高い条件から順に書く
    • 例えば「優秀」判定を最後に書くと正しく判定できない
  3. And / Or を活用
    • 複数の条件を組み合わせるときに便利
  4. 場合によっては関数や変数で中間判定を作る
    • 年齢カテゴリ、成績ランクなどを変数にすることでネストが浅くなる

💡 この考え方を応用すると、

  • 「性別+年齢+職業+スコア+出席日数」など、5つ以上の条件も整理して扱えるようになります。

タイトルとURLをコピーしました