多分岐選択
条件式 If Then Else IIF Select Switch 今日の目的
Dim n As Long n = 10 If n = 10 Then 条件式 Debug.Print ゆっくりしていってね! End If
比較演算子 その他 よく使用する演算子 文字列型にたいする条件式 条件式 オブジェクト型 バリアント型に対する条件式
比較演算子 = 等しい <> 等しくない >= 以上 > より大きい <= 以下 < 小さい
Dim n As Long n = 10 If n = 10 Then = 演算子 Debug.Print ゆっくりしていってね! End If = 演算子この場合は n と 10 は等しいので True と評価されて命令が実行される
Dim n As Long n = 10 If n <> 10 Then <> 演算子 Debug.Print ゆっくりしていってね! End If <> 演算子この場合は n と 10 は等しいので False と評価されて命令が実行されない
Dim n As Long n = 10 If n >= 10 Then >= 演算子 Debug.Print ゆっくりしていってね! End If >= 演算子この場合は n が 10 以上なので True と評価されて命令が実行される
Dim n As Long n = 10 If n > 10 Then > 演算子 Debug.Print ゆっくりしていってね! End If > 演算子この場合は n が 10 より多きくないので False と評価されて命令が実行されない
Dim n As Long n = 10 If n <= 10 Then <= 演算子 Debug.Print ゆっくりしていってね! End If <= 演算子この場合は n が 10 以下なので True と評価されて命令が実行される
Dim n As Long n = 10 If n < 10 Then < 演算子 Debug.Print ゆっくりしていってね! End If < 演算子この場合は n が 10 より小さくないので False と評価されて命令が実行されない
比較演算子 その他 よく使用する演算子 文字列型にたいする条件式 条件式 オブジェクト型 バリアント型に対する条件式
条件式でよく使う演算子 exp1 And exp2 exp1 とexp2が両方真なら真 exp1 Or exp2 Not exp1 exp1 と exp2 のどちらかが真なら真 exp1 が偽なら真 真なら偽
Dim b1 As Boolean, b2 As Boolean b1 = True : b2 = False If b1 And b2 Then AND 演算子 Debug.Print ゆっくりしていってね! End If And 演算子両方の条件が True の場合に True になる
Dim b1 As Boolean, b2 As Boolean b1 = True : b2 = False If b1 Or b2 Then OR 演算子 Debug.Print ゆっくりしていってね! End If Or 演算子どちらかの条件が True の場合に True になる
AND,ORでの注意 Dim b As Boolean b = False If b And fnctest() Then Debug.Print ゆっくりしていってね! End If VBA では条件式全て評価される この場合 すでに偽が確定していても fnctest というプロシージャが実行されてしまう
AND,ORでの注意 Dim b As Boolean b = False If b = True Then If fnctest() Then Debug.Print ゆっくりしていってね! End If End If プロシージャーを実行させたくないときはアンド演算子をつかわずにもう一つ IF 文を記述する
AND,OR での注意 If fnctesta() Or fnctestb() Then Debug.Print ゆっくりしていってね! End If OR の場合の例かりにプロシージャー A が真であっても プロシージャ B は実行されてしまう
AND,ORでの注意 Dim b As Boolean b = fnctesta() If b=false Then b=fnctestb() End if If b Then Debug.Print ゆっくりしていってね! End If なので プロシージャー A が偽のときのみ プロシージャー B を実行するようにする
Dim b1 As Boolean b1 = True If Not b1 = True Then Not 演算子 Debug.Print ゆっくりしていってね! End If Not 演算子真なら偽 偽なら真になる
比較演算子 その他 よく使用する演算子 文字列型にたいする条件式 条件式 オブジェクト型 バリアント型に対する条件式
文字列型についての 比較演算子による文字の比較 StrComp による文字列比較 Like によるパターンチェック 条件式
Dim s As String If s = Then 比較演算子の例 Debug.Print ゆっくりしていってね! End If この例では文字列型の変数が空文字かチェックしている
Dim s As String 比較演算子の例 s = TAKE IT EASY. If s = Take it easy. Then Debug.Print ゆっくりしていってね! End If 文字列に対して = 演算子でチェックした場合これが True か False になるかはここだけでは判断できない
Option Compare Binary * または省略した場合 ~ 略 Dim s As String 比較演算子の例 s = TAKE IT EASY. If s = Take it easy. Then Debug.Print ゆっくりしていってね! End If Option Compare Binary の場合大文字小文字は区別する
比較演算子の例 Option Compare Text ~ 略 Dim s As String s = TAKE IT EASY. If s = Take it easy. Then Debug.Print ゆっくりしていってね! End If Option Compare Text の場合大文字小文字は区別せず また地域できめられたテキスト並び順に依存する 日本語の場合 かなとカナや全角 半角は区別されない
StrCompを使用した例 Dim s As String s = TAKE IT EASY. If StrComp(s, "TAKE it EASY! ", _ vbtextcompare) = 0 Then Debug.Print ゆっくりしていってね! End If StrComp 関数は文字の比較をする
StrCompを使用した例 Dim s As String s = TAKE IT EASY. If StrComp(s, "TAKE it EASY! ", _ vbtextcompare) = 0 Then Debug.Print ゆっくりしていってね! End If StrComp 関数の第 3 引数 vbusecompareoption: オプションに依存 vbbinarycompare: 完全一致か比較 vbtextcompare: 大文字小文字 半角全角 かなカタカナは区別しない
StrCompを使用した例 Dim s As String s = TAKE IT EASY. If StrComp(s, "TAKE it EASY! ", _ vbtextcompare) = 0 Then Debug.Print ゆっくりしていってね! End If StrComp 関数戻り値 0: 文字列が等しいそれ以外 : 等しくない
Dim s As String Like 演算子の例 s = 神はいっているゆっくりしていけと If s Like * ゆっくり * Then Debug.Print ゆっくりしていってね! End If Like 演算子はパターンに比較ができる
比較演算子 条件式 その他 よく使用する演算子 文字列型にたいする条件式 オブジェクト型 バリアント型に対する条件式
オブジェクト型やバリアント型で使用する条件式 Nothingの判定 オブジェクトのタイプ判定 Emptyの判定 Nullの判定 オブジェクト型か? 配列か? 日付に変換できるか? 数値に変換できるか?
Dim obj As Object Nothing の判定 If obj Is Nothing Then Debug.Print obj は Nothing だよ End If Is Nothing を使用してオブジェクトが Nothing かどうかチェックする
Dim obj As Object Nothing の判定 If Not obj Is Nothing Then Debug.Print obj は Nothing じゃないよ End If Not XXX Is Nothing を使用してオブジェクトが Nothing でないことを確認する
オブジェクトのタイプ Dim obj As Object Set obj = ThisWorkbook If TypeOf obj Is Workbook Then Debug.Print obj は WorkBook だよ End If オブジェクトのタイプを確認するには TypeOf XXX Is を使用する
Dim v As Variant Emptyの確認 v = Empty 初期値のままでも OK If IsEmpty (v) Then Debug.Print v は Empty End If Empty は Variant の変数にデータが入っていないことを表すこれは IsEmpty() 関数でチェックする
Dim v As Variant v = Null If IsNull (v) Then Debug.Print v は Null End If Nullの確認 Null は Variant の変数に有効なデータが入っていないことを示すこれは IsNull() 関数でチェックする
オブジェクトか? Dim v As Variant Set v = ThisWorkbook If IsObject (v) Then Debug.Print v は Object End If IsObject はバリアント型がオブジェクトを参照しているかチェックする
Dim v As Variant v = Array( a, b, c ) If IsArray (v) Then Debug.Print v は配列 End If 配列か? IsArray は指定の変数が配列かどうかチェックしている
日付に変換できるか? Dim v As Variant v = 1999 年 1 月 1 日 If IsDate (v) Then Debug.Print v は日付 End If IsDate は指定の変数が日付に変換できるかどうかチェックしている この関数は 地域や環境によって同じ値をチェックしても結果がかわる
数値に変換できるか? Dim v As Variant v = 1999.345 If IsNumeric (v) Then Debug.Print v は数値 & CDbl(v) End If IsNumeric は指定の変数が数値に変換できるかチェックしている
条件式 If Then Else IIF Select Switch 今日の目的
If Then Else If 条件式 -1 Then 条件 1 をみたした場合の命令 [ElseIf 条件式 -n Then 条件 n を満たした場合の命令 ] [Else 条件を満たさなかった場合の命令 ] EndIf
If Then Else If 条件式 -1 Then 条件 1 をみたした場合の命令 [ElseIf 条件式 -n Then 条件 n を満たした場合の命令 ] [Else 条件を満たさなかった場合の命令 ] EndIf If Then と End If は必須
If Then Else If 条件式 -1 Then 条件 1 をみたした場合の命令 [ElseIf 条件式 -n Then 条件 n を満たした場合の命令 ] [Else 条件を満たさなかった場合の命令 ] EndIf もし条件式 1 を満たした場合ここが実行されて その後 End If へ
If Then Else If 条件式 -1 Then 条件 1 をみたした場合の命令 [ElseIf 条件式 -n Then 条件 n を満たした場合の命令 ] [Else 条件を満たさなかった場合の命令 ] EndIf 任意の数だけ記述できる
If Then Else If 条件式 -1 Then 条件 1 をみたした場合の命令 [ElseIf 条件式 -n Then 条件 n を満たした場合の命令 ] [Else 条件を満たさなかった場合の命令 ] EndIf Else は必要なら一つだけ記述できる
If Then Else If a = 10 Then Debug.Print 1 EndIf
If Then Else If a = 10 Then Debug.Print 1 Else Debug.Print Else EndIf
If Then Else If a = 10 Then Debug.Print 1 ElseIf a = 20 Then Debug.Print 2 Else Debug.Print Else EndIf
条件式 If Then Else IIf Select Switch 今日の目的
IIf 関数 ret = IIf ( 条件式, 真の場合の値, 偽の場合の値 )
IIf 関数 Debug.Print IIf(a = 10, 真, 偽 ")
IIf 関数 Debug.Print IIf(True, fnca(), fncb() ) 評価は両方の引数に対して行われるので注意
条件式 If Then Else IIf Select Switch 今日の目的
Select 式 [Case 値 -n (n:1 以上 ) Select 式が値に一致した場合に実行 ] [Case Else すべての Case が条件を満たさなかった場合の命令 ] End Select
Select 式 [Case 値 -n (n:1 以上 ) Select 式が値に一致した場合に実行 ] [Case Else すべての Case が条件を満たさなかった場合の命令 ] End Select
Select 式 [Case 値 -n (n:1 以上 ) Select 式が値に一致した場合に実行 ] [Case Else すべての Case が条件を満たさなかった場合の命令 ] End Select 値の指定方法 Case 値値の場合にステートメント実行
Select 式 [Case 値 -n (n:1 以上 ) Select 式が値に一致した場合に実行 ] [Case Else すべての Case が条件を満たさなかった場合の命令 ] End Select 値の指定方法 : リスト Case 値 1, 値 2, 値 3 値 1 値 2 値 3 のいづれかのときステートメント実行
Select 式 [Case 値 -n (n:1 以上 ) Select 式が値に一致した場合に実行 ] [Case Else すべての Case が条件を満たさなかった場合の命令 ] End Select 値の指定方法 :To キーワード Case 値 1, 値 x To 値 y 値 1 または x~y の範囲
Select 式 [Case 値 -n (n:1 以上 ) Select 式が値に一致した場合に実行 ] [Case Else すべての Case が条件を満たさなかった場合の命令 ] End Select 値の指定方法 :Is キーワード Case 値 1, Is 比較演算子 X
Select 式 [Case 値 -n (n:1 以上 ) Select 式が値に一致した場合に実行 ] [Case Else すべての Case が条件を満たさなかった場合の命令 ] End Select
Select Case a Case 1 Debug.Print 1" Case 2 To 4 Debug.Print 2" Case 5, 6, 7 Debug.Print 3 Case Is > 1000 Debug.Print 4 Case Else Debug.Print 5 End Select
Select Case a Case 1 Debug.Print 1" Case 2 To 4 Debug.Print 2" Case 5, 6, 7 Debug.Print 3 Case Is > 1000 Debug.Print 4 Case Else Debug.Print 5 End Select
Select Case a Case 1 Debug.Print 1" Case 2 To 4 Debug.Print 2" Case 5, 6, 7 Debug.Print 3 Case Is > 1000 Debug.Print 4 Case Else Debug.Print 5 End Select
Select Case a Case 1 Debug.Print 1" Case 2 To 4 Debug.Print 2" Case 5, 6, 7 Debug.Print 3 Case Is > 1000 Debug.Print 4 Case Else Debug.Print 5 End Select
Select Case a Case 1 Debug.Print 1" Case 2 To 4 Debug.Print 2" Case 5, 6, 7 Debug.Print 3 Case Is > 1000 Debug.Print 4 Case Else Debug.Print 5 End Select
Select Case a Case 1 Debug.Print 1" Case 2 To 4 Debug.Print 2" Case 5, 6, 7 Debug.Print 3 Case Is > 1000 Debug.Print 4 Case Else Debug.Print 5 End Select
条件式 If Then Else IIf Select Switch 今日の目的
Switch Switch ( 式 1, 値 1[, 式 2, 値 2 [, 式 n, 値 n]])
Switch Debug.Print Switch (a = 10, 1 _, a = 20, "2 _, a > 30, "3")
Switch Debug.Print Switch (True, 1 _, a = 20, "2 _,fncsub(), "3")
条件式 If Then Else IIf Select Switch 今日の目的
多分岐選択