0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📊連茉第5回初心者のためのExcel VBA入門IfずSelect Caseの正しい䜿い分け💫

Last updated at Posted at 2025-03-12

Excel VBAにおける条件分岐の基本

私はVBAの掻甚経隓を通じお埗た知識を敎理し、共有する目的で蚘事を䜜成しおいるプログラミング歎1幎半になる゚ンゞニアです。
前回は、シヌト操䜜の基本ず゚ラヌ凊理に぀いお解説したした。今回は、VBAプログラミングの芁ずなる条件分岐に぀いお詳しく説明しおいきたす。条件分岐は、プログラムの凊理を状況に応じお倉曎するための重芁な機胜です。特に業務効率化を目的ずしたVBAツヌルでは、ナヌザヌの入力や様々なデヌタの状態に応じお適切な凊理を行う必芁があり、条件分岐の理解は必須ずなりたす

目次

はじめに
条件分岐
If文
Select Case
条件分岐の䜿い分け
たずめ

はじめに

条件分岐は、「もし〜なら」ずいう凊理をプログラムで実珟する機胜です。䟋えば、「もし売䞊が目暙倀を超えおいれば、ボヌナスを蚈算する」「もし圚庫が䞍足しおいれば、発泚凊理を行う」ずいった業務ロゞックを実装する際に䞍可欠な芁玠です。

VBAでは、If 文ず Select Case 文が䞻に䜿甚され、いずれも異なる条件に基づいおプログラムの流れを柔軟に制埡するために甚いられたす。条件分岐を理解し掻甚するこずで、より耇雑なVBAプログラムを䜜成するこずができ、業務の自動化を効率的に実珟可胜です。

条件分岐

条件分岐ずは、プログラムの䞭で特定の条件を満たしおいるかどうかを刀断し、その結果に応じお異なる凊理を実行する仕組みのこずです。

日垞生掻でも、「雚が降っおいたら傘をさす」、「信号が青になったら暪断歩道を枡る」ずいったように、無意識のうちに条件分岐を行っおいたす。

VBAにおいおも、条件分岐はプログラムの流れを倉える重芁な圹割を担っおいたす。 䟋えば、「セルの倀が特定の数倀以䞊なら文字の色を倉える」、「入力されたデヌタによっお凊理内容を倉える」ずいった凊理を自動化するこずができたす。

If文

If文は、最も基本的な条件分岐の方法で、「もしなら」ずいう条件刀断を行いたす。
䞎えられた条件が真たたは停であるかを評䟡し、それに基づいお異なる凊理を行いたす。

条件には比范挔算子ひかくえんざんしを䜿甚したす。比范挔算子ずは、2぀の倀を比范しお、その結果が「正しい (True)」か「間違っおいる (False)」かを刀断するために䜿う蚘号のこずです。

簡単に蚀うず、「AずBは等しい」「AはBより倧きい」ずいった質問をコンピュヌタヌにするための道具です。

比范挔算子の皮類

挔算子 意味 䟋
= 等しい If A = B Then
<> 等しくない If A <> B Then
> より倧きい If A > B Then
< より小さい If A < B Then
>= 以䞊 If A >= B Then
<= 以䞋 If A <= B Then

基本構文

If 条件 Then
    ' 条件が真の堎合に実行する凊理
End If

コヌド䟋

Dim num As Long
num = 10

If num > 5 Then
    MsgBox "numは5より倧きいです"
End If

この䟋では、倉数 num が5より倧きい堎合、メッセヌゞボックスが衚瀺されたすが、5より小さい堎合は、䜕も衚瀺されたせん。

If...Then...Elseステヌトメント

条件が真の堎合ず停Falseの堎合で、異なる凊理を実行できたす。
先皋の䟋でいうず、5より小さい堎合も、メッセヌゞを衚瀺したい堎合に䜿甚したす。

If 条件 Then
    ' 条件が真の堎合に実行する凊理
Else
    ' 条件が停の堎合に実行する凊理
End If

コヌド䟋

Dim num As Integer
num = 3

If num > 5 Then
    MsgBox "numは5より倧きいです"
Else
    MsgBox "numは5以䞋です"
End If

この䟋では、倉数 num が5より倧きい堎合は 「numは5より倧きいです」、そうでない堎合は 「numは5以䞋です"」ずいうメッセヌゞボックスが衚瀺されたす。

If...Then...ElseIf...Elseステヌトメント

耇数の条件を順に評䟡し、最初に真ずなる条件に察応する凊理を実行したす。

If 条件1 Then
    ' 条件1が真の堎合に実行する凊理
ElseIf 条件2 Then
    ' 条件2が真の堎合に実行する凊理
Else
    ' どの条件も真でない堎合に実行する凊理
End If

コヌド䟋

Dim スコア As Long
スコア = Range("A1").Value ' セルA1に入力された倀を取埗

' スコアに基づいお評䟡を衚瀺
If スコア >= 80 Then
    MsgBox "優"
ElseIf スコア >= 60 Then
    MsgBox "可"
Else
    MsgBox "吊"
End If

この䟋では、倉数 スコア の倀に応じお、"優"、"可"、"吊" のいずれかのメッセヌゞボックスが衚瀺されたす。
たた、さらに条件を増やしたい堎合は、その条件の数だけ ElseIf を蚘茉したす。

Dim スコア As Long
スコア = Range("A1").Value ' セルA1に入力された倀を取埗

' スコアに基づいお評䟡を衚瀺
If スコア >= 80 Then
    MsgBox "優"
ElseIf スコア >= 70 Then
    MsgBox "良"
ElseIf スコア >= 60 Then
    MsgBox "可"
Else
    MsgBox "吊"
End If

ネストされたIf文

ネストされた If 文ずは、If 文の䞭にさらに別の If 文を含めるこずです。これを「ネストされたIf文」や「入れ子のIf文」ず呌びたす。耇数の条件を組み合わせお、より现かい条件分岐を䜜るこずができたす。䟋えば、「たず特定の条件Aが成り立぀堎合に、さらに条件Bが成り立぀か」ずいうような堎合に䜿いたす。

' 最初の条件もし条件1が真なら
If 条件1 Then        

   ' 条件1が真の堎合に実行される凊理
    If 条件2 Then
        ' 条件1ず条件2が䞡方ずも真の堎合に実行される凊理

     ' 条件2が停の堎合
    Else          
        '条件1は真だが条件2が停の堎合に実行される凊理      
    End If

'条件1が停の堎合  
Else               
    '条件1が停の堎合に実行される凊理
End If

コヌド䟋

Dim 幎霢 As Long
Dim 性別 As String

幎霢 = Range("A1").Value '幎霢をセルA1から取埗
性別 = Range("B1").Value '性別をセルB1から取埗

If 性別 = "男性" Then
    ' 最初の条件性別が男性の堎合
    If 幎霢 >= 20 Then
        ' 2぀目の条件20歳以䞊の堎合
        MsgBox "成人男性です"
    Else
        ' 2぀目の条件20歳未満の堎合
        MsgBox "未成幎男性です"
    End If
End If    

この䟋では、倉数 性別 が「男性」かどうかをチェックしたす。もし「男性」なら、さらに、倉数 幎霢 が20以䞊かどうかをチェックし「成人男性です」ず衚瀺したす。もし20未満なら「未成幎男性です」ず衚瀺したす。

耇合条件

耇数の条件を組み合わせお、より耇雑な条件刀断を行うこずができたす。これには、Andか぀、Orたたは、Notでないずいった論理挔算子を䜿いたす。

  • And: すべおの条件が真の堎合に真ずなる
  • Or: どれか1぀の条件が真の堎合に真ずなる
  • Not: 条件の結果を反転させる
If 条件A And 条件B Then
    ' 䞡方の条件が真の堎合に実行する凊理
End If

If 条件A Or 条件B Then
    ' どちらかの条件が真の堎合に実行する凊理
End If

If Not 条件A Then
    ' 条件Aが停の堎合に実行する凊理
End If

コヌド䟋

Dim 数倀A As Long
Dim 数倀B As Long

' 䟋ずしお数倀を蚭定
数倀A = 10 
数倀B = 20 

' 数倀Aが5より倧きい、か぀数倀Bが15より小さい
If 数倀A > 5 And 数倀B < 15 Then
    ' 数倀Aは5より倧きいが、数倀Bは15より倧きいので、䞋蚘のメッセヌゞは、衚瀺されない
    MsgBox "数倀Aは5より倧きく、か぀数倀Bは15より小さい"
End If

' 数倀Aが5より倧きい、たたは数倀Bが15より小さい
If 数倀A > 5 Or 数倀B < 15 Then
    ' 数倀Aは5より倧きいため、数倀Bは15より倧きいが、䞋蚘のメッセヌゞは、衚瀺される
    MsgBox "数倀Aは5より倧きいか、数倀Bは15より小さい"
End If

' 数倀Aが15より倧きくない数倀Aが15以䞋
If Not 数倀A > 15 Then
    ' 数倀Aは15以䞋のため、䞋蚘のメッセヌゞは、衚瀺される
    MsgBox "数倀Aは15以䞋です"
End If

より実践的な耇合条件の䟋

Dim 幎霢 As Long
Dim 性別 As String
Dim 䌚員 As Boolean

' セルに入力された倀を取埗
幎霢 = Range("A1").Value
性別 = Range("B1").Value
䌚員 = Range("C1").Value

' 女性で65歳以䞊、たたは䌚員である堎合に割匕
If (性別 = "女性" And 幎霢 >= 65) Or 䌚員 = True Then
    MsgBox "割匕察象です"
End If

If文のポむント

  • 必芁に応じおElseIfやElseを远加しお条件を増やすこずができる
  • 条件が耇数ある堎合は、䞊から順に条件が評䟡され、最初に満たす条件が芋぀かった時点でその分岐に入る
  • If文は、䜕重にもネスト入れ子にできる
  • あたり深くネストするずコヌドが読みにくくなるため、泚意が必芁
  • And 、Or 、Not を䜿うこずで、より耇雑な条件分岐が可胜になる
  • 条件を組み合わせるこずで、より现かい条件に察応できる
  • 条件が倚くなりすぎるず分かりにくくなるので、必芁に応じお分割するこずをお勧め

Select Case

Select Caseは、1぀の匏や倉数が取り埗る耇数の倀に応じお、異なる凊理を行う堎合に䜿甚したす。If-ElseIf を倚甚する堎合の代替ずしお有効です。コヌドをより簡朔にするこずができる

基本構文

Select Case 倉数
    Case 倀1
        ' 倀1の堎合の凊理
    Case 倀2
        ' 倀2の堎合の凊理
    Case Else
        ' その他の堎合の凊理
End Select

コヌド䟋

' 曜日の数倀を栌玍する倉数
Dim dayOfWeek As Long

' 䟋ずしお数倀を蚭定
dayOfWeek = 3 ' 1:日曜日, 2:月曜日, ..., 7:土曜日

' 曜日の数倀に応じお察応する曜日名を衚瀺
Select Case dayOfWeek
    Case 1
        MsgBox "日曜日"
    Case 2
        MsgBox "月曜日"
    Case 3
        MsgBox "火曜日"
    Case 4
        MsgBox "氎曜日"
    Case 5
        MsgBox "朚曜日"
    Case 6
        MsgBox "金曜日"
    Case 7
        MsgBox "土曜日"
    ' 1から7以倖の倀の堎合
    Case Else
        MsgBox "無効な倀です"
End Select

この䟋では、dayOfWeek の倀に応じお、曜日を衚瀺するメッセヌゞボックスが衚瀺されたす。

耇数の倀を指定する堎合

1぀の条件に察しお耇数の倀を指定したい堎合は、カンマ , で区切っお蚘述したす。

' 成瞟を栌玍する倉数
Dim grade As String

' 䟋ずしおAを代入
grade = "A"

' 成瞟に応じお刀定結果を衚瀺
Select Case grade
    Case "A", "B", "C" ' A、B、Cのいずれかの堎合
        MsgBox "合栌"
    Case "D", "E"      ' DたたはEの堎合
        MsgBox "再詊隓"
    Case Else          ' 䞊蚘以倖の堎合
        MsgBox "䞍合栌"
End Select

この䟋では、grade が"A"、"B"、"C"のいずれかの堎合に"合栌"、"D"、"E"のいずれかの堎合に"再詊隓"、それ以倖の堎合に"䞍合栌"ず衚瀺されたす。

範囲で倀を指定する堎合

数倀の範囲でケヌスを指定する堎合は To 挔算子を䜿甚したす。

' 点数を栌玍する倉数
Dim score As Long

' 䟋ずしお85点を代入
score = 85    

' 点数の範囲に応じお評䟡を衚瀺
Select Case score
    Case 90 To 100 ' 90から100たでの堎合
        MsgBox "S"
    Case 80 To 89  ' 80から89たでの堎合
        MsgBox "A"
    Case 70 To 79  ' 70から79たでの堎合
        MsgBox "B"
    Case Else
        MsgBox "C"
End Select

この䟋では、scoreの倀が90以䞊100以䞋の堎合は「S」、80以䞊89以䞋の堎合は「A」、70以䞊79以䞋の堎合は「B」、それ以倖の堎合は「C」ず衚瀺したす。

数倀の倧小を比范したい堎合

数倀の倧小比范を行う堎合は Is 挔算子ず比范挔算子を組み合わせお䜿甚したす。

' スコアを栌玍する倉数
Dim スコア As Long

' セルA1に入力された倀を取埗
スコア = Range("A1").Value 

' スコアに基づいお評䟡を衚瀺
Select Case スコア
    Case Is >= 80
        MsgBox "優"
    Case Is >= 70
        MsgBox "良"
    Case Is >= 60
        MsgBox "可"
    Case Else
        MsgBox "吊"
End Select

この䟋では、倉数 スコア の倀に応じお、"優"、"良"、"可"、"吊" のいずれかのメッセヌゞボックスが衚瀺されたす。

あいたい怜玢したい堎合

文字列のパタヌンマッチング文字列が特定のパタヌンに䞀臎するかを行う堎合は Like 挔算子ずワむルドカヌド*や?を䜿甚したす。

ワむルドカヌドに぀いお

ワむルドカヌドずは、文字列怜玢やパタヌンマッチングで䜿甚する特殊文字のこずです。

  • *0文字以䞊の任意の文字列
  • ?任意の1文字
  • #任意の1桁の数字0-9
  • [文字リスト]指定した文字のいずれか1文字ず䞀臎
    • [A-Z]AからZたでの任意の1文字
    • [0-9]0から9たでの任意の1文字
  • [!文字リスト]指定した文字以倖のいずれか1文字ず䞀臎

より詳しい情報は、Microsoft公匏ドキュメントの文字列の比范で䜿甚されるワむルドカヌド文字をご参照ください。

ワむルドカヌドの䜿甚䟋
䜿甚䟋 意味該圓䟋
*花* 「花」を含む文字列花束、花瓶、花火、桜の花、花より団子
花* 「花」で始たる文字列花束、花瓶、花火
花? 「花」で始たる2文字の文字列花束
*花 「花」で終わる文字列花火、桜の花
???花 「花」で終わる4文字の文字列桜の花
花#本 「花」の埌に1桁の数字、その埌に「本」が続く文字列花1本、花2本など
花[園寺] 「花園」「花寺」のいずれかず䞀臎
花[!園寺] 「花園」「花寺」以倖で「花」で始たる2文字の文字列ず䞀臎
[春倏秋冬]花 「春花」「倏花」「秋花」「冬花」のいずれかず䞀臎
[!春倏秋冬]花 「春花」「倏花」「秋花」「冬花」以倖で「花」で終わる2文字の文字列ず䞀臎
202[0-3]-[0-1]#-* 2020幎から2023幎の間で、月が01月から12月の間で、任意の幎月日䟋2021-04-01
ワむルドカヌド䜿甚時のポむント

耇雑なワむルドカヌドの組み合わせは混乱の原因ずなるため、必芁最小限の䜿甚を心がけたしょう。たた、頻繁に䜿甚するパタヌンは倉数や定数ずしお定矩しおおくず、コヌドの可読性が向䞊したす。

コヌド䟋
' ファむル名を怜玢するための倉数を宣蚀
Dim fileName As String

' 怜玢したいファむル名を蚭定
fileName = "Test123.txt"

' ファむル名のパタヌンをチェック
Select Case fileName
    Case Like "Test*"    ' Testで始たるファむル名かチェック
        MsgBox "ファむル名はTestで始たりたす"
        
    Case Like "*.txt"    ' 拡匵子が.txtかチェック
        MsgBox "テキストファむルです"
        
    Case Like "???##*"   ' 3文字+2桁の数字で始たるファむル名かチェック
        MsgBox "3文字+2桁の数字で始たるファむルです"
        
    Case Like "*[A-Z]*"  ' 倧文字のアルファベットを含むかチェック
        MsgBox "倧文字のアルファベットを含むファむルです"
        
    Case Else            ' 䞊蚘のどのパタヌンにも䞀臎しない堎合
        MsgBox "どのパタヌンにも䞀臎したせんでした"
End Select

Select Caseのポむント

  • 各Caseは遞択する基準である
  • 耇数の倀をコンマで区切っお1぀のCaseに含めるこずも可胜
  • 数倀の範囲は To で指定
  • 比范条件は Is で指定
  • 文字列のあいたい怜玢パタヌンマッチングは Like で指定
  • Case Else は、党おの Case に該圓しない堎合の凊理を指定

Select Case文䜿甚時の泚意点

  • 比范する倀の型は統䞀する
    ※ 文字列ず数倀を混圚させるず予期せぬ動䜜の原因に
  • Case Elseは可胜な限り実装する
    ※ 想定倖の倀ぞの察応を忘れずに
  • 耇数の倉数を同時に条件分岐するこずは、可読性の芳点から非掚奚
    ※ 「幎霢が20歳以䞊」か぀「性別が男性」のような耇数条件の指定はIf文を䜿甚

条件分岐の䜿い分け

If 文ず Select Case 文はどちらも条件分岐に䜿甚できたすが、それぞれ埗意な堎面が異なりたす。

If文 Select Case文
条件の数 耇雑な条件、耇数の条件を組み合わせる堎合に適しおいる 単玔な条件、1぀の倉数に察する耇数の遞択肢がある堎合に適しおいる
コヌドの簡朔さ 条件が耇雑になるずコヌドが冗長になりやすい 単玔な条件分岐ではコヌドが簡朔になる

具䜓的な䟋

  • If文が適しおいる䟋

    • 耇数の条件を組み合わせお刀定する堎合䟋幎霢が20歳以䞊で、か぀性別が男性の堎合
    • 条件が耇雑で、Select Case 文では衚珟しにくい堎合
    ' ✅ If文での実装掚奚
    ' 【理由】
    ' - 耇数の条件幎霢ず性別を組み合わせた刀定に適しおいる
    ' - コヌドの意図が分かりやすい
    If 幎霢 >= 20 And 性別 = "男性" Then
        MsgBox "成人男性です"
    ElseIf 幎霢 >= 20 And 性別 = "女性" Then
        MsgBox "成人女性です"
    Else
        MsgBox "未成幎です"
    End If
    
    ' ❌ Select Case文での実装非掚奚
    ' 【理由】
    ' - 単䞀の倉数の倀を元にした刀定が基本のため、初心者がわかりにくい
    ' - コヌドの意図が分かりにくい (↓ 詳现
    '   Select Case True を䜿っお耇雑な論理刀定を行うず、If文ず倧差なくなり、
    '   曞き方や理解の芳点から冗長になっおしたうため。
     Select Case True ' 冗長なコヌド
        Case 幎霢 >= 20 And 性別 = "男性"
            MsgBox "成人男性です"
        Case 幎霢 >= 20 And 性別 = "女性"
            MsgBox "成人女性です"
        Case Else
            MsgBox "未成幎です"
    End Select
    
  • Select Case文が適しおいる䟋

    • 1぀の倉数の倀によっお耇数の凊理に分岐する堎合䟋曜日によっお異なる凊理を行う堎合
    • 条件が単玔で、Select Case 文で衚珟しやすい堎合
    ' ✅ Select Case文での実装掚奚
    ' 【理由】
    ' - コヌドが簡朔で読みやすい
    ' - 条件の远加・倉曎が容易
    ' - デバッグが簡単
    Select Case 曜日
        Case "月", "火", "æ°Ž", "朚", "金"
            MsgBox "平日です"
        Case "土", "日"
            MsgBox "䌑日です"
        Case Else
            MsgBox "無効な曜日です"
    End Select
    
    ' ❌ If文での実装非掚奚
    ' 【理由】
    ' - 同じ倉数曜日を䜕床も曞く必芁がある
    ' - コヌドが長くなる
    ' - 条件を远加する際にミスが起きやすい
    If 曜日 = "月" Or 曜日 = "火" Or 曜日 = "æ°Ž" Or 曜日 = "朚" Or 曜日 = "金" Then
        MsgBox "平日です"
    ElseIf 曜日 = "土" Or 曜日 = "日" Then
        MsgBox "䌑日です"
    Else
        MsgBox "無効な曜日です"
    End If
    

䜿い分けのポむント

䞀般的には、条件が耇雑な堎合耇数の論理挔算子を䜿甚するなどは If 文、単玔な堎合は Select Case 文を䜿甚するこずが掚奚されたす。

状況に応じお適切な条件分岐を䜿い分けるこずで、より効率的で可読性の高いVBAプログラムを䜜成するこずができたす。

たずめ

条件分岐は、VBAプログラミングにおいお凊理の流れを制埡する重芁な芁玠です。If文ずSelect Case文は、それぞれの特城を掻かしお䜿い分けるこずで、より効率的で保守性の高いプログラムを䜜成するこずができたす。特に、耇雑な条件刀断にはIf文を、単䞀の倉数に基づく耇数の分岐にはSelect Case文を䜿甚するずいう䜿い分けを意識するこずで、より読みやすく、メンテナンスしやすいコヌドを実珟できたす。たた、゚ラヌ凊理や想定倖の入力ぞの察応ずしお、ElseやCase Elseを適切に実装するこずで、プログラムの信頌性を高めるこずができたす。

もし蚘事の内容で䞍明な点や、より詳しく知りたい郚分がありたしたら、コメントでお知らせください。たた、実務での条件分岐の掻甚䟋や、より効率的な実装方法など、皆様のノりハりもぜひ共有しおいただければ幞いです。

次回は、VBAにおけるルヌプ凊理For文、Do文に぀いお詳しく解説する予定です。繰り返し凊理を理解するこずで、より効率的な自動化プログラムを䜜成できるようになりたす。どうぞお楜しみに

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?