If Then ★ Select Case |
||||
| わずかな知識で VBA! |
If Then
|
|||
条件分岐のステートメント If Then/Select Case
|
わずかな知識で VBA! ![]() |
|||
| 反面、Select Caseステートメントは、比較する値だけを記述すればいいので、 ソースがすっきりとしますが、複雑な条件判断にはむいていません。 Sub tesuto() Dim modori As Integer modori = MsgBox("MsgBox関数について知りたいですか?", 36, "学習意欲の確認") Select Case modori Case 6 MsgBox "「はい」が押されました。" & Chr(13) & Chr(10) _ & "続けてお読みください!", , "がんばりましょう!" Case 7 MsgBox "「いいえ」が押されました。" & vbCrLf _ & "後悔しますよ!", , "残念!" End Select End Sub この場合は、MsgBox関数の戻り値を比較しています。 この二つのステートメントは、どちらも、その条件を記述された順番で順に調べていき、 合致した時点で決められた処理を実行し、ステートメントを抜けて次の処理へいきます。 つまり、Ifステートメントの例で説明すると、<<条件1>>が成立したら、 <<条件2>>以降は検討せずに<<処理1>>を実行し、End If 以降の処理へと移ることを覚えていてください。 Select Caseステートメントでは、あまり失敗はしないと思いますが、 Ifステートメントでは、初心者の方は条件式の書き順に注意してください。 では、Ifステートメントの説明です。 Ifステートメントにも、2つの構文があります。 1. 1行形式のIfステートメント If misu = "失敗" Then Exit Sub 変数「misu」に「失敗」が代入されていたらプロシージャから抜け出る。 変数「misu」が「失敗」以外なら何も実行しない。 If I = 5 Then M = 6 Iに「5」が代入されていたら、Mに「6」を代入する。 Iが「5」以外なら何もしない。 2. ブロック形式のIfステートメント If misu = "失敗" Then 変数「misu」に「失敗」が代入されていたら misu = "" 変数「misu」の内容を消し Exit Sub プロシージャから抜け出る。 End If 最後に必ず「End If」で締めくくります。 If I = 5 Then Iに「5」が代入されていたら M = 6 Mに「6」を代入する End If 上の例のように、ブロック形式のものは、条件が成立すると、 If・・・からEnd If 迄の間に書かれた処理を実行します。 この行数には制限はなく、また、この間にもIfステートメントを入れ子にすることもできます。 ただ、あまり入れ子にして階層を深くしすぎると、後でとても分かりずらいプロシージャとなってしまいます。 各ステートメントの記述で、1段下げた記述を行っていますが、 これはプロシージャをわかりやすくするため意識的に行っているためで、 自動的にこうゆう記述様式になるわけではありません。 また「'」を使用したコメント行も必要です。 作成している時は何をしているかわかっていますが、3ヶ月もたてば、何も覚えていません。 後日の検証時でも、わかりやすいプロシージャにするためには、コメントは必ず必要です。 サイコロゲームのプロシージャの一部です If setna.Value = "" Then '4回までしかフレない cnta = cnta + 1 If cnta = 4 Then 100 Range("E2").Value = "ゲーム終了!" Range("E2").Font.ColorIndex = 3 MsgBox "ゲーム終了です!「Set」ボタンを押してください。", 64, "プレイ方法!" Set setna = Nothing Exit Sub End If narabi If misu = "終了" Then misu = "" GoTo 100 100番地へ飛びます。 End If Set setna = Range("O5") End If 複数の条件判断 Ifステートメントは、条件が複数の場合に、ElseIfを用いて判断させることが可能です。 If 《条件1》 Then 《処理1》 ElseIf 《条件2》 Then 《処理2》 Else 《条件1》、《条件2》以外 《処理3》 End if このように、Else Ifを使うと条件の数を無限にふやすことが可能ですが、 条件に一致しなかった場合も考えられるので、 最後に Else を記述してその処理を行うこともできます。 ここで、Ifステートメントで一番重要な条件式の書き方のお勉強です。 条件が、たった一つの物だけならばやさしいのですが、中には、 「これが、Aで、あれがBならば、処理Cを行う」というように、 複数の条件が一致した時にだけ行いたい処理があります。 こういう場合には、条件を演算子でつなげます。 比較演算子や、論理演算子は、 より複雑な条件を設定するためには覚えておかなければならないものです。 = : 等しい If Tanka = 100 then Tanakが100ならば、 <>: 等しくない If Tanka <> 100 then Tanakが100でなければ、 > : 大きい If Tanka > 100 then Tanakが100より大きければ、 < : 未満 If Tanka < 100 then Tanakが100未満ならば、 >= : 以上 If Tanka >= 100 then Tanakが100以上ならば、 <= : 以下 If Tanka <= 100 then Tanakが100以下ならば、 大きさを比べる場合は、変数Tankaのデータ型は、LongやSingle等の「整数型」に宣言しておく 必要がありますが、「=」や「<>」は文字列型でも使用できます。 If Range("B6").Value = "東京都" Then If Range("B6").Value <> "東京都" Then 他に、文字列の比較でよく使うのが、「Like」です。 これは、パーターンマッチングで比較を行うため、文章の一部がマッチしていれば、 分岐させることが可能です。 例えば、Range("B6")に 「東京都千代田区千代田1-1」と入力されている場合に If Range("B6").Value Like "東京都*" Then 東京都**なら If Range("B6").Value Like "*千代田区*" Then **千代田区**なら という具合に関係の無い部分に「*」印を入力して比較します。 論理演算子 And、Or演算子 複数の条件を判断する場合の条件の連結に使用します。 If A = 5 And B >= 80 Then Aが5でBが80以上の場合 If A = 5 Or B >= 80 Then Aが5か、または、Bが80以上の場合 AかBが5で、Cが80以上か、Dが100以上ならというように複数の条件の場合には、 次の様に( )で囲います。 If (A = 5 Or B = 5) And (C >= 80 Or D >= 100) Then 次に、Select Caseステートメントの説明です。 Select Case ステートメントは単純な比較に向いています。 既述のMsgBox関数の戻り値を比較するような場合です。 もちろん、Ifステートメントと同じように比較演算子も使用できますが、 その場合は、書き方が独特なものとなっています。 Select Case Range("A1") Case Is > 1000 Range("G1").Value = "Aランク" Case Is > 600 Range("G1").Value = "Bランク" Case Is > 400 Range("G1").Value = "Cランク" Case Is > 200 Range("G1").Value = "Dランク" Case Else Range("G1").Value = "Eランク" End Select という具合に、「Is 比較演算子 値」になりますが、「Is」の入力を忘れていても、 「Is」は自動的に入力されるので、覚えていなくても大丈夫(?)です。 この条件式も書く順番を間違えて Case Is > 200から書き始めると、200以上はすべてDランクになってしまうので、注意してください。 > |
||||
わずかな知識でVBA! TOP マクロで何ができる? ユーザーインターフェース マクロの記録 マクロの登録 イベントについて マクロの編集とデバッグ ゲームで覚えるVBAプログラミング オブジェクトの操作 セルの操作 MsgBox関数・InputBox関数 変数の型 ヘルプの活用 イミディエイトウィンドウ Withステートメント Setステートメント 条件分岐のステートメント If Then Else,Select Case 繰り返しのステートメント Do Loop 繰り返しのステートメント For Next ダイアログボックスを作ってみよう1 ダイアログボックスを作ってみよう2 【実践編】 ActiveXコントロール 各コントロールのプロパティ 文字列の操作 Endプロパティ リンク・検索 マイプロフィール YouTubeの部屋 |
||||
Copyright (C) わずかな知識でVBA! All Rights Reserved