多分岐選択needtec.sakura.ne.jp/vba/lesson/excelvba008.pdfdim v as variant v =...

75
多分岐選択

Upload: others

Post on 30-Jan-2021

1 views

Category:

Documents


0 download

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

    今日の目的

  • 多分岐選択