【VBA】If文による条件分岐の方法

Excel・VBA

VBAでのIf文の使い方についてまとめたので紹介します。If ~ Then ~ Elseステートメントは条件に応じて処理を分岐させる構文です。

状況に応じたIf 文の使い分け

条件に合致した場合に処理を行う

任意の条件に対して、合致する(True)場合に処理を行う際の基本的な書式は次の通りです。

《書式》
 1)条件に合致するとき、一つだけ処理を実行する場合
  If 条件 Then 処理
 2)条件に合致するとき、複数行のコードを実行する場合
  If 条件 Then
   処理A
   処理B
   処理C

  End if

上記の1)と2)の違いは、2)の場合、If 分の最後にEnd ifステートメントの記載が必要なことです。処理が一つだけの場合はEnd ifは必要ありませんが、複数となった場合にはEnd ifが必要となります。

また、処理が一つだけの場合でも2)の書き方で表すことも可能です。

条件に合致する場合としない場合で別々の処理を実行する。

任意の条件に対して、合致する(True)場合としない(False)場合で別々の処理を行うケースは次の書式に従います。

《書式》
  If 条件 Then
   処理A
  Else
   処理B
  End if

条件に合致した場合は、処理Aを実行します。一方、合致しなかった場合は処理Bを実行します。

最初の条件に合致しない場合、次の条件を検証する。

最初の条件に対して合致しない(False)場合、次の条件を検証(Else if)する場合の書式です。次の条件の検証(Else if)は複数指定することが可能です。

《書式》
  If 条件 Then
   処理A

  ElseIf 条件2 then
   処理B
  ElseIf 条件3 then
   処理C
  Else
   処理D
  End if

条件に対して上から順番に検証をしていきます。なお、すべての条件に合致しない場合にも処理を行う場合には最後の条件判断にElseを指定します。

複数の条件を指定する

複数の条件を指定して判断を行う場合、and もしくは or で条件を繋げます。

《書式》
 1)すべての条件に合致する場合に処理を行う
  If 条件1 and 条件2 Then
   処理
  End if
 2)いずれかの条件に合致する場合に処理を行う
  If 条件1 or 条件2 Then
   処理
  End if

1)では、条件1と条件2に対して合致する(True)の時に処理を実行します。一方2)では、条件1に合致する(True)場合もしくは、条件2に合致する(True)場合に処理を実行します。

1)、2)のいずれの場合も and もしくは or で条件をつなげることで3つ以上の条件を指定することが可能です。また、andとorを混ぜてしていすることも可能です。

条件の書き方

つぎに条件の書き方を紹介します。ある変数Aに対して、それぞれのケースにおける条件の書き方です。

値が合致する・しない、以上・以下、より大きい・小さい

変数Aと判断基準の値がそれぞれの関係の場合における条件の書き方です。

《条件の書き方》
1)値が合致する
  A=○○
2)値が合致しない
  A<>○○
3)変数の値が指定した値以上
  A>=○○
4)変数の値が指定した値より大きい
  A>○○
5)変数の値が指定した値以下
  A<=○○
6)変数の値が指定した値より小さい
  A<○○

文字列パターンの一部が一致するかを判断する

変数Aが文字列の場合に、判断基準となるの文字列のパターンと部分的に一致しているかを判断する場合です。Like演算子とワイルドカードを利用して条件を書きます。

Like 演算子とワイルドカード

まずLike演算子とワイルドカードについて簡単に説明します。

《Like演算子》2つの文字列を比較する。
 1)書式
 result = string Like pattern
 result:任意の数値変数
 string:任意の文字列
 pattern:任意の文字列

result, string, patternのいずれも必須となります。stringとpatternが一致した場合はTrue(-1)、一致しない場合は(0)を返します。

文字列の比較にはワイルドカードや文字リストを使用することができます。

ワイルドカード・文字リスト 意味
? 任意の 1 文字
* 0 文字以上の文字
# 任意の 1 桁の数字 (0-9)
charlist ] charlistに含まれる任意の全角または半角の 1 文字
!charlist ] charlist に含まれない任意の全角または半角の 1 文字

ワイルドカードを使う場合、”?”を使うと変数A=”あいう”のとき result = 変数A Like “あ?う” と書けます。

この時、”?” は “い” と同意になるのでresultはTrue(-1)が返ってきます。また、”*”を使った場合は、result = 変数A Like “*”と書くことができ、この場合もTrueが返ります。

また、文字リストの使い方は、変数A=”あ”のとき、文字リストの中に合致する文字が含まれていればTrue(-1)を返します。例えば、変数=”あ”のとき、result = 変数A Like “[あいうえお]”とした場合、Trueが返ります。

一方、[! Charlist]では文字リストに含まれていない場合にTrueが返り、文字リストに含まれてるとFalseが返ります。例えば、変数A=”あ”のとき、result = 変数A Like “[!あいうえお]”とするとFalse(0)が返ります。

最後に、ワイルドカードを文字列として比較対象にしたい場合についてです。ワイルドカードの文字列を[]( 角かっこ)で囲むと比較対象の文字として使用できます。

条件の書き方

比較したい文字列が、判断基準となる文字列の一部と合致しているかどうかを判断する条件の書き方は次のように書きます。

《条件の書き方》
 1)比較したい文字列パターンはわかっているが、
   前後の文字数がわからないとき → 変数A Like “*●●*”
 2)比較したい文字列パターンがわかっており、
   前後の文字数もわかっているとき。→ 変数A Like “???●●?”
  (●●の前に3文字、後に1文字あるとわかっている場合)

If文のサンプルコード

条件に合致した場合に処理を行う

サンプルコード

Sub sample1()
 Dim dum As Integer

 dum = InputBox("整数を入力してください")
 If dum < 100 Then MsgBox ("100より小さい値が入力されました")

End Sub

入力した整数が100よりも小さかった場合に、メッセージが表示されます。※文字列が入力されるとエラーが発生します。

コードの実行結果

条件に合致する場合としない場合で別々の処理を実行する。

サンプルコード

Sub sample1()
 Dim dum As Integer
 
 dum = InputBox("整数を入力してください")
 If dum < 100 Then
  MsgBox ("100より小さい値が入力されました")
 Else 
  MsgBox ("100以上の値が入力されました")
 End If 

 End Sub 

先ほどのサンプルを書き換え、入力値に対して100より小さいか、100以上かで別々のメッセージが表示されるようにしました。

コードの実行結果

最初の条件に合致しない場合、次の条件を検証する。

サンプルコード

Sub sample1()
 Dim dum As Iteger

 dum = InputBox("整数を入力してください")

 If dum < 100 Then
  MsgBox ("100より小さい値が入力されました")
 ElseIf dum >= 200 Then
  MsgBox ("200以上の値が入力されました")
 ElseIf dum >= 150 Then
  MsgBox ("150以上の200未満の値が入力されました")
 Else
  MsgBox ("100以上の150未満の値が入力されました")
 End If

End Sub

更に書き換え、入力値に対して100より小さい場合、200以上の場合、150以上200未満の場合、100以上150未満の場合でそれぞれ異なるメッセージが表示されるようにしています。

条件は、入力値が①100より小さいかどうか②200以上かどうか③150以上、200未満かどうかの順で検証されます。いずれにも合致しない場合はElse部分のメッセージとなります。

サンプルコード

Sub sample1()
 Dim dum As String

 dum = InputBox("文字を一つ入力してください")
 
 If Len(dum) <> 1 Then
  MsgBox ("入力する文字は一文字にしてください")
 GoTo edsb
 End If

 If dum Like "[A-Z]" Then
  MsgBox ("入力値された文字は大文字のアルファベットです")
 ElseIf dum Like "[a-z]" Then
  MsgBox ("入力値された文字は小文字のアルファベットです")
 ElseIf dum Like "[あ-ん]" Then
  MsgBox ("入力値された文字は ひらがな です")
 ElseIf dum Like "[ア-ン]" Then
  MsgBox ("入力値された文字は カタカナ です")
 End If

edsb:

End Sub 

こちらはLike演算子と文字リストを利用して入力された文字列の判別を行うマクロです。入力された文字がアルファベット(大文字・小文字)か仮名(ひらがな・カタカナ)かを判別してメッセージ表示します。

複数の条件を指定する

サンプルコード

Sub sample1()
 Dim dum As Integer

 dum = InputBox("整数を入力してください")
 
 If dum >= 50 And dum < 100 Then
  MsgBox ("入力値は50以上100未満です")
 End If

End Sub

判断に複数の条件を指定したマクロです。入力値が50以上かつ100未満のときにメッセージを表示します。

複数の条件を指定するときには、条件の書き方に注意してください。

《複数条件の書き方》
【間違った書き方】 変数>●● and (or) <◆◆
【正しい書き方】  変数> ●● and (or) 変数<◆◆

複数の条件を書くときは、比較対象を繋げていくのではなく、あくまで個別の条件を and や or で繋げるということに注意してください。

コメント

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