多分岐選択
条件式
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 exp1とexp2のどちらかが真なら真 Not exp1 exp1が偽なら真。真なら偽
条件式でよく使う演算子
Dim b1 As Boolean, b2 As Boolean
b1 = True : b2 = False If b1 And b2 Then
Debug.Print “ゆっくりしていってね!” End If
AND 演算子
And演算子
両方の条件がTrueの場合に Trueになる
Dim b1 As Boolean, b2 As Boolean
b1 = True : b2 = False If b1 Or b2 Then
Debug.Print “ゆっくりしていってね!” End If
OR演算子
Or演算子
どちらかの条件がTrueの場合に Trueになる
Dim b As Boolean
b = False
If b And fncTest() Then
Debug.Print “ゆっくりしていってね!” End If
AND,OR での注意
VBAでは条件式全て評価される。
この場合、すでに偽が確定していて
も、fncTestというプロシージャが実
行されてしまう。
Dim b As Boolean
b = False
If b = True Then If fncTest() Then
Debug.Print “ゆっくりしていってね!” End If
End If
AND,OR での注意
プロシージャーを実行させたくない ときはアンド演算子をつかわずに もう一つIF文を記述する
If fncTestA() Or fncTestB() Then
Debug.Print “ゆっくりしていってね!” End If
AND,OR での注意
ORの場合の例
かりにプロシージャーAが真であっ ても、プロシージャBは実行されて しまう。
Dim b As Boolean b = fncTestA()
If b=False Then b=fncTestB() End if
If b Then
Debug.Print “ゆっくりしていってね!” End If
AND,OR での注意
なので、プロシージャーAが偽のと きのみ、プロシージャーBを実行す るようにする
Dim b1 As Boolean
b1 = True
If Not b1 = True Then
Debug.Print “ゆっくりしていってね!” End If
Not 演算子
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 の場合
大文字小文字は区別せず、また地域 できめられたテキスト並び順に依存 する。日本語の場合、かなとカナや 全角・半角は区別されない。
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 を使用した例
StrComp関数の第3引数
vbUseCompareOption:オプションに依存 vbBinaryCompare: 完全一致か比較
vbTextCompare:大文字小文字、半角全角、
かなカタカナは区別しない
Dim s As String
s = “TAKE IT EASY.”
If StrComp(s, "TAKE it EASY! ", _ vbTextCompare) = 0 Then
Debug.Print “ゆっくりしていってね!” End If
StrComp を使用した例
StrComp関数戻り値
0:文字列が等しい それ以外:等しくない
Dim s As String
s = “神はいっているゆっくりしていけと・・・”
If s Like “*ゆっくり*” Then
Debug.Print “ゆっくりしていってね!” End If
Like 演算子の例
Like演算子はパターンに比較ができ る
・比較演算子
・その他・よく使用する演算子
・文字列型にたいする条件式
・オブジェクト型・バリアント型に対する条件式
条件式
・Nothingの判定
・オブジェクトのタイプ判定
・Emptyの判定
・Nullの判定
オブジェクト型やバリア ント型で使用する条件式
・オブジェクト型か?
・配列か?
・日付に変換できるか?
・数値に変換できるか?
Dim obj As Object
If obj Is Nothing Then
Debug.Print “objはNothingだよ” End If
Nothing の判定
Is Nothingを使用して
オブジェクトがNothingかどうか チェックする
Dim obj As Object
If Not obj Is Nothing Then
Debug.Print “objはNothingじゃないよ” End If
Nothing の判定
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
‘ v = Empty 初期値のままでもOK If IsEmpty (v) Then
Debug.Print “vはEmpty”
End If
Empty の確認
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 条件式-1 Then
条件1をみたした場合の命令 [ElseIf 条件式-n Then
条件nを満たした場合の命令] [Else
条件を満たさなかった場合の命令] EndIf
If … Then … Else
If 条件式-1 Then
条件1をみたした場合の命令 [ElseIf 条件式-n Then
条件nを満たした場合の命令] [Else
条件を満たさなかった場合の命令] EndIf
If … Then … Else
If… ThenとEnd If は必須
If 条件式-1 Then
条件1をみたした場合の命令 [ElseIf 条件式-n Then
条件nを満たした場合の命令] [Else
条件を満たさなかった場合の命令] EndIf
If … Then … Else
もし条件式1を満たした場合ここが 実行されて、その後、End If へ
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 … Else
Elseは必要なら一つだけ記述できる
If a = 10 Then
Debug.Print “①” EndIf
If … Then … Else
If a = 10 Then
Debug.Print “①” Else
Debug.Print “Else”
EndIf
If … Then … Else
If a = 10 Then
Debug.Print “①” ElseIf a = 20 Then Debug.Print “②” Else
Debug.Print “Else”
EndIf
If … Then … Else
条件式
If…Then…Else
IIf
Select
Switch
今日の目的
ret = IIf (条件式,真の場合の値
,偽の場合の値)IIf 関数
Debug.Print IIf(a = 10, “真
”, “偽")IIf 関数
Debug.Print IIf(True , fncA() , fncB() )
IIf 関数
評価は両方の引数に対して行われる ので注意。
条件式
If…Then…Else
IIf
Select
Switch
今日の目的
Select 式
[Case 値-n (n:1以上)
式が値に一致した場合に実行] [Case Else
すべてのCaseが条件を満たさなかった場合の命令] End Select
Select
Select 式
[Case 値-n (n:1以上)
式が値に一致した場合に実行] [Case Else
すべてのCaseが条件を満たさなかった場合の命令] End Select
Select
Select 式
[Case 値-n (n:1以上)
式が値に一致した場合に実行] [Case Else
すべてのCaseが条件を満たさなかった場合の命令] End Select
Select
値の指定方法 Case 値
値の場合にステートメント実行
Select 式
[Case 値-n (n:1以上)
式が値に一致した場合に実行] [Case Else
すべてのCaseが条件を満たさなかった場合の命令] End Select
Select
値の指定方法:リスト Case 値1 , 値2, 値3
値1、値2、値3のいづれかのとき ステートメント実行
Select 式
[Case 値-n (n:1以上)
式が値に一致した場合に実行] [Case Else
すべてのCaseが条件を満たさなかった場合の命令] End Select
Select
値の指定方法:Toキーワード Case 値1 , 値x To 値y
値1または x~yの範囲
Select 式
[Case 値-n (n:1以上)
式が値に一致した場合に実行] [Case Else
すべてのCaseが条件を満たさなかった場合の命令] End Select
Select
値の指定方法:Isキーワード Case 値1 , Is 比較演算子 X
Select 式
[Case 値-n (n:1以上)
式が値に一致した場合に実行] [Case Else
すべてのCaseが条件を満たさなかった場合の命令] End Select
Select
Select Case a Case 1
Debug.Print “①"
Case 2 To 4
Debug.Print “②"
Case 5, 6, 7
Debug.Print “③“ Case Is > 1000
Debug.Print “④“ Case Else
Debug.Print “⑤“ End Select
Select Case a Case 1
Debug.Print “①"
Case 2 To 4
Debug.Print “②"
Case 5, 6, 7
Debug.Print “③“ Case Is > 1000
Debug.Print “④“ Case Else
Debug.Print “⑤“ End Select
Select Case a Case 1
Debug.Print “①"
Case 2 To 4
Debug.Print “②"
Case 5, 6, 7
Debug.Print “③“ Case Is > 1000
Debug.Print “④“ Case Else
Debug.Print “⑤“ End Select
Select Case a Case 1
Debug.Print “①"
Case 2 To 4
Debug.Print “②"
Case 5, 6, 7
Debug.Print “③“ Case Is > 1000
Debug.Print “④“ Case Else
Debug.Print “⑤“ End Select
Select Case a Case 1
Debug.Print “①"
Case 2 To 4
Debug.Print “②"
Case 5, 6, 7
Debug.Print “③“ Case Is > 1000
Debug.Print “④“ Case Else
Debug.Print “⑤“ End Select
Select Case a Case 1
Debug.Print “①"
Case 2 To 4
Debug.Print “②"
Case 5, 6, 7
Debug.Print “③“ Case Is > 1000
Debug.Print “④“ Case Else
Debug.Print “⑤“ End Select
条件式
If…Then…Else
IIf
Select
Switch
今日の目的
Switch (式1,値1[,式2,値2…[,
式n,値n]])Switch
Debug.Print Switch (a = 10, “
①” _ , a = 20, "②“ _ , a > 30, "③")Switch
Debug.Print Switch (True, “
①” _ , a = 20, "②“ _ ,fncSub() , "③")Switch
条件式
If…Then…Else
IIf
Select
Switch
今日の目的
多分岐選択