多分岐選択needtec.sakura.ne.jp/vba/lesson/excelvba008.pdfdim v as variant v =...
TRANSCRIPT
-
多分岐選択
-
条件式
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
-
Dim n As Long n = 10
If n < 10 Then
Debug.Print “ゆっくりしていってね!”
End If
-
条件式
・比較演算子
・その他・よく使用する演算子
・文字列型にたいする条件式
・オブジェクト型・バリアント型に対する条件式
-
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
今日の目的
-
多分岐選択