分岐処理第1回目です!
If…Then…Elseについて勉強しましょう!
楽しみに待っていました。しっかり勉強しま~す(^^)
よろしくお願いしますm(_ _)m
前回のおさらいはこちらの記事です(^^)/ 下のカードをクリックすれば開きます
前回記事でわかったことは
・While…Wend と Do…Loop の違いがわかりました
・While…WendよりDo…Loopを使った方が良いことがわかりました
【この記事でわかることは】
・If…Then…Else ステートメントの使い方がわかります
・ElseIf を使った複数条件の分岐や論理演算子の使い方がわかります
If…Then…Else ステートメント
「もし~だったら~する」といった簡単な条件分岐を行う制御構文です
If…Then…Else ステートメントの構文
If condition Then [ statements ] [ **Else ** elsestatements ]
または、ブロック形式の構文を使用できます。ブロック形式構文の場合 End If が必要です
If condition Then
[ statements ]
[ ElseIf condition-n Then
[ elseifstatements ]]
[ Else
[ elsestatements ]]
End If
If…Then…Else ステートメント構文の指定項目詳細はつぎのとおり
パーツ | 説明 |
---|---|
condition | 必須。 次の 2 種類の式の 1 つ以上を指定します。 True または False に評価される数値式または文字列式です。 condition が Null の場合は、condition が False として処理されます。 TypeOf objectname Is objecttype 形式の式。 objectname は任意のオブジェクト参照であり、objecttype は任意の 有効なオブジェクト タイプです。 _objectname_が objecttype で指定されたオブジェクトの種類の いずれかである場合、式は True です。それ以外の場合は False です。 |
statements | ブロック形式では省略可能で、Else 句がない 1 行形式では必要です。 condition が Trueの場合にコロンで区切られる、または実行される ステートメントを指定します。 |
condition-n | 省略可能です。 condition と同じです。 |
elseifstatements | 省略可能。 関連する condition-n が True の場合に実行されるステート メントを指定します。 |
elsestatements | 省略可能です。 以前の condition または condition-n 式がどれも True でない場合に実行されるステートメントを指定します。 |
構文の解説
・conditionには、条件を評価する数式または文字列式を指定します
・statementsには、条件が真(True)だった場合に実行するステートメントを指定します
・elsestatementsには、条件が偽(False)だった場合に実行するステートメントを指定します
・elseifstatementsには、条件-n が真(True)の場合に実行されるステートメントを指定します
・conditionの TypeOf objectname Is objecttype 形式の式は、比較演算子の Is 演算子を利用して同じオブジェクト型(Object)であれば真(True)を返し、それ以外の場合は偽(False)を返します
短く簡単な 1 行形式 (最初の構文) を使用できます(End If は不要です)
しかし、構造化されたブロック形式 (2番目の構文) は、コードが読みやすくなり保守とデバッグがしやすくなります。ブロック If は End If ステートメントで終了する必要があります
【1行形式の構文】(コロン(:)で区切れば複数の実行する処理を指定できます)
※1行にすべてを記述する必要があります
If 条件式 Then 条件式が真(True)の場合に実行される処理 [:次の処理:次の処理…]
[Else 条件式が偽(False)の場合に実行される処理] ※[]は省略可能
【ブロック形式の構文】
If 条件式 Then ※以下[]は省略可能
[条件式が真(True)の場合に実行される処理]
[ElseIf 条件式n Then
[条件式nが真(True)の場合に実行される処理]]
[Else
[条件式が偽(False)の場合に実行される処理]]
End If
・Else 句と ElseIf 句は、省略可能です
・ブロック If では必要なだけ ElseIf 句を含めることができます
・ブロック If ステートメントはネストできます
If…Then…Else 使用例
'If_Then_Elseステートメントのブロック形式と1行形式のSample
Sub If_Else_Sample()
Dim Number As Long
Dim Digits As Long
Dim MyString As String
Number = InputBox("数字を入力してください", "TEST") 'NO入力要求
If Number < 10 Then
'10未満だった場合
Digits = 1
ElseIf Number < 100 Then
'100未満だった場合
Digits = 2
Else
'100以上の場合
Digits = 3
End If
'Digitsの値を評価して出力メッセージを決める
If Digits = 1 Then MyString = "10未満です" Else MyString = "10以上です"
MsgBox MyString 'メッセージ表示
End Sub
・InputBox を使って数値の入力を促し、入力値を変数 Number に代入します
・If で変数 Number を評価して10未満だった場合、Then に移り Digits = 1 とします
・ElseIf は Number が10以上で、再評価の結果100未満だった場合、Digits = 2 とします
・Else は Number が100以上だった場合、Digits = 3 とします
・20行目は、1行形式構文で Number = 1 かそれ以外が MyString に文字列を代入しています
・最後に MsgBox で MyString を出力します
If TypeOf 構造(Is演算子)の使用例
'If TypeOf...Then...Else の使用例
Sub If_TypeOf_Then_Else_Sample()
Dim a As Object
Dim b As Object
Set a = Sheets("Sheet1")
Set b = ThisWorkbook
If a Is b Then
MsgBox "オブジェクト a と b は同じオブジェクトです"
Else
MsgBox "オブジェクト a と b は同じオブジェクトではありません"
End If
Set b = Sheets("Sheet1") 'bに違うオブジェクトをセット
If a Is b Then
MsgBox "オブジェクト a と b は同じオブジェクトです"
Else
MsgBox "オブジェクト a と b は同じオブジェクトではありません"
End If
End Sub
・オブジェクト変数を二つ( a と b )用意しています
・オブジェクト変数 a にシートオブジェクトの”Sheet1″を代入しています
・オブジェクト変数 b にブックオブジェクトの”ThesWorkbook”を代入しています
・8行目で If TypeOf 構造(Is演算子)を使用して、二つのオブジェクトを評価しています
・評価結果が同じ場合は Then 違う場合は Else のメッセージを表示します
・14行目で、オブジェクト変数 b にシートオブジェクトの”Sheet1″を再代入しています
・15行目で再び If TypeOf 構造(Is演算子)で二つのオブジェクトを評価しています
・評価結果が同じ場合は Then 違う場合は Else のメッセージを表示します
論理演算子について
・複数の条件において「すべての条件を満たす」「いずれかの条件を満たす」などを判定したいときは論理演算子を使います
論理演算子一覧
・主に使うものだけ一覧にしています
・If…Then…Else ステートメント構文の条件式に論理演算子を使うことが出来ます
・論理演算子を使えば、複数の条件を判定して複合評価することが出来ます
まとめ(おわりに)
はい! If…Then…Elseステートメントの説明はここで終了です!
使い方は理解できましたか?
はい! よくわかりました(^^)
条件分岐の方法を使えば、いろいろなことが出来そうですね(^^ゞ
はい! 前回までの繰り返しや条件分岐を使わないと効率的なプログラムは作成することができないと言っていいと思います!
次回は、Select Case ステートメントによる分岐処理の解説です。楽しみに待っていてね(^^)/
まとめと感想など
・マクロ(VBA)を実行する際は必ずバックアップを取ってから行ってください!
・マクロ(VBA)は実行後にファイルを保存すると元に戻すことはできません!
・実行後にファイルを保存せず終了すれば、実行前に戻すことができます!
★★★ ランキング参加中! クリックしてね(^^)/ ★★★
今後の記事について
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
当面は「初心者向けマクロVBA」の記事を継続して書いていきます
【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう現在検討中です
・その他雑記的に「小ネタなどいろいろ」・・・・・
・今後の記事にもご期待ください(^^)/
記事のサンプルファイルをダウンロードできます
この記事のサンプルはこのリンク先からダウンロードできます!
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください
・If…Then…Else ステートメントの使い方がわかりました
・ElseIf を使った複数条件の分岐がわかりました
・論理演算子を使って複数の条件を判定して評価できることがわかりました