まえがき
VBAで条件分岐をする方法はIF文を使うパターンとCase文を使う方法の2種類あります。
なんで2つもあるんだい?どちらを使えばよいか分からないよ。。。
どちらでも同じ事はでき、どちらかでないとできないというものはありませんので、好みで使えば良いと思いますが、初心者の方は、まずはIF文を使いこなして、慣れてきたら分岐パターンが多いケースにCase文を使えば良いと思います。
少ない選択肢で複雑な条件を設定する場合はIF文を使い、分岐パターンが多い場合はCase文を使った方が、見やすい綺麗なプログラムが書けます。
IF文による処理のフローは以下のイメージになります。
ポイントは、最初の条件から順に判定されて、一致すると処理をして終了する事です。つまり、最初の方によく分岐に入るパターンを入れておけば、余計な分岐を経由せずに処理が軽くなります。
IF文のコマンド
IF文は4種類のコマンドで作られています。
構文 | 説明 | 必須or省略可 | 複数記載 |
If 【条件1】 Then 【処理1】 |
【条件1】で分岐させ【処理1】を実行します | 必須 | 不可 |
ElseIf【条件2】 Then 【処理2】 |
2つ目以降の条件で分岐させる Case文と同じような使い方 【条件2】で分岐させ【処理2】を実行します |
省略可 | 複数可 |
Else 【処理3】 |
条件に当てはまらない場合【処理3】を実行します | 省略可 | 不可 |
End If | 条件分岐を終了します。 | ほぼ必須 | 不可 |
ElseIf【条件】 Then と elseは省略可能です。以下にサンプルを表示します。緑文字は説明です。
i1 = 3 ←変数i1を1にします。(値によって分岐先が変わります。)
If i1 = 1 Then ←変数i1が1の場合はメッセージボックス[1]が表示されます。
MsgBox “1でごわす”
ElseIf i1 = 2 Then ←変数i1が2の場合はメッセージボックス[2]が表示されます。
MsgBox “2ざます”
ElseIf i1 = 3 Then ←変数i1が3の場合はメッセージボックス[3]が表示されます。
MsgBox “3だっぺ”
Else ←変数i1が1,2,3ではない場合はメッセージボックス[1と2と3以外]が表示されます。
MsgBox “1と2と3以外”
End If ←条件分岐を終了します。
IF文の条件式
6種類の条件式を設定できます。
条件式 | 説明 |
A = B | AがBと一致する場合 |
A <> B | AがBと一致しない場合 |
A >= B | AがB以上の場合 |
A <= B | AがB以下の場合 |
A > B | AがBより大きい場合 |
A < B | AがBより小さい場合 |
AとBの順番はどちらでも良く、私は以上(>=)の矢印の向きがしっくりこないため、以下(<=)しか覚えていません。=が右に来るということを覚えておけば、忘れないかもしれません。
あいまい検索(Like)
頭、真ん中、後ろのそれぞれの文字で条件を判別させる事をあいまい検索といいます。
あいまい検索をするためには以下のような条件式で記載します。
If 【変数】 Like “【頭の文字】*” Then |
If 【変数】 Like “*【真ん中の文字】*” Then |
If 【変数】 Like “【後ろの文字】*” Then |
ポイントはLikeを使う事と、不明な文字列側に*(アスタリスク)を付けることです。*は正規表現で不明な文字列を表すのに使われ、このような使い方をする事が多いので覚えておきましょう。
【サンプルコード】
MOJI = InputBox(“1下から1文字選んで選び[〇だん]と入力してください。” & vbLf & “か、く、は、ひ、び”)
If MOJI Like “か*” Then ‘かではじまる文字の場合
MsgBox “花壇(” & MOJI & “)はきれいですね。”
ElseIf MOJI Like “く*” Then ‘くではじまる文字の場合
MsgBox “件(” & MOJI & “)の用件で話したい。”
ElseIf MOJI Like “は*” Then ‘はではじまる文字の場合
MsgBox “取引は破談(” & MOJI & “)とさせて貰おう。”
ElseIf MOJI Like “ひ*” Then ‘ひではじまる文字の場合
MsgBox “被弾(” & MOJI & “)するぞ~、逃げろ~”
ElseIf MOJI Like “び*” Then ‘びではじまる文字の場合
MsgBox “それは美談(” & MOJI & “)でございますね。”
Else ‘それ以外の場合
MsgBox “よく分からない文字(” & MOJI & “)が入力されました”
End If
複数の条件式の組合せ
条件式は2つ以上を組合せて設定する事ができます。
条件式 | 説明 |
【条件1】And 【条件2】 | 【条件1】【条件2】の両方を満たす場合 |
【条件1】Or 【条件2】 | 【条件1】【条件2】の少なくとも一方を満たす場合 |
AndとOrを組合せる事でより複雑な条件を設定できます。
入れ子設定
if文の中にif文を入れる事を入れ子(ネスト)設定と言います。入れ子の中がif文だけであれば、Andと同様ですが、その中にelseifやelseを組み合わせる事で更に複雑な条件分岐ができます。
[Ifブロックに対応するEnd Ifがありません。]ってエラーが出るんじゃがなんでじゃろ
入れ子にする場合の注意として、開始のIfと終了のEnd Ifのセットがどこなのか分からなくならないようにしましょう。プログラムが複雑になると開始のIfと終了のEnd Ifのセットが数百行離れる場合もあります、そういった場合は、それぞれの開始終了のインデントを揃える事でプログラムの可読性が高まり、プログラムの変更や修正がやり易くなります。
インデントを揃えるには、対象行を選択して[Tab]キーを押す事でまとめてインデントを下げる事ができます。誤ってインデント下げてしまった場合は[Shift]キー+[Tab]キーでインデントを元に戻すこともできます。
if文を1行で記載する
if文だけで処理も1つであれば、1行で記載する事ができます。
If 【条件】 Then 【処理】
endifも省略しており機械的に処理内容として認識できるのは同じ1行のみとなる欠点はありますが、1行で完結するのでプログラムは見やすく綺麗になるので、積極的に利用しましょう。