こんにちは。
if文についておしえてください。
以下のようなマクロがあるとします。
変数 tensuuに-1をいれて実行すると①→②のように動作し「入力エラー」と表示されます。
tensuuに120を入れて実行すると①´→②´の順に動作し「入力エラー1」と表示されます。
どして、-1のときは入力エラー1にはいかず入力エラーにいくのでしょうか?
120のときは入力エラーにはいかず入力エラー1にいくのでしょうか?
動きがよくわかりません。
IF文とELSEはどういう紐づけがされているのでしょうか?
よろしくおねがいいたします。
Sub t()
tensuu = -1
If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
If tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If
Else
MsgBox "入力エラー1" '②´
End If
Else
MsgBox "入力エラー" '②
End If
End Sub
No.1ベストアンサー
- 回答日時:
If 〜 Then 〜 Else 〜 End If
で1セットです。
ネスト(入れ子)になったIF文というのは、 Then 〜 とか Else 〜 の〜の部分にIf文がくるものです。
ですから、外のIfを越えてしまうことはありません。
よって、一番内側から見ていけば、構造がはっきりします。
一番内側から見ます。
If tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If
が1セットです。
これを 「文1」とすると元のプログラムは
If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
「文1」
Else
MsgBox "入力エラー1" '②´
End If
Else
MsgBox "入力エラー" '②
End If
となります。この状態で「一番内側」を見ると
If tensuu <= 100 Then '①´
「文1」
Else
MsgBox "入力エラー1" '②´
End If
です。これを「文2」とすると
If tensuu >= 0 Then '①
「文2」
Else
MsgBox "入力エラー" '②
End If
余談ですが
この例の場合、外側2つは、判定内容と処理とが離れてしまい、見辛いのは確かです。
if 条件 Then A Else B は if not条件 Then B Else A と同じ、ということから、Thenでの処理とElseでの処理を入れかえれば、
条件の直ぐ下の処理が来るので、見易さが格段によくなります。
If tensuu < 0 Then '① ' tensuu<0 は not (tensuu>=0)と同じ
MsgBox "入力エラー" '②
ElseIf tensuu > 100 Then '①´
MsgBox "入力エラー1" '②´
ElseIf tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If ' ElseIfで継いでいるので、ネストにはなっていない
No.4
- 回答日時:
「if文について」の直接の回答ではないので皆さん避けておられますが、
条件が「tensuu」1つの場合は、
Select Case 構文がお勧めです。
http://excelvba.pc-users.net/fol6/6_2.html
不等号が条件に入るのならば、「Is」も必要になります。
数値の範囲指定ならば 「to」も使用できます。
また、[Select Case True]をつかえば、もっと複雑な複数条件への対応も楽になると思います。
以上、今後のマクロ作成の参考にしてください。
No.3
- 回答日時:
もしかしてですが、
If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
If tensuu >= 80 Then
この記述が勘違いを生みやすいのでは?
不等号は向きを揃える習慣をつけた方が判りやすいと思います。
If 0 =< tensuu Then '①
If tensuu <= 100 Then '①´
If 80 =< tensuu Then
最初の不成立を見落とされたのでは?
見当違いならごめんなさい。
ご回答ありがとうございます。
IF文のなかにIF文があるときの処理がわからなかったために
ご質問をさせていただきました。
ご回答ありがとうございました。
No.2
- 回答日時:
プログラム入力の際にTABキーで段付け(インデント)をしていますか?
同じレベルのIf ~ Else ~ End Ifで同じ深さのインデントを付ける様にすれば流れが追いやすくなりますよ。
下のプログラムだと、tensuu = -1の場合、①の判定で対応するElse(②の上、インデントが同じ深さ)へとび、Elseの処理がされるのが分かりやすいと思います。
もちろんIf文だけなく、For~Next や Do While ~ Loopも同様です。
※下のプログラムについて
この掲示板では半角のスペースは省略されてしまいますので敢えて全角スペースでインデントしています。
Sub t()
tensuu = -1
If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
If tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If
Else
MsgBox "入力エラー1" '②´
End If
Else
MsgBox "入力エラー" '②
End If
End Sub
ご回答ありがとうございます。
インデントはあまり意識しておりませんでした。
することによりって、かなりわかりやすくなりますね。
これをきに心がけてみようと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Excel(エクセル) R列の1111/11/11以外、且つQ列の×の条件で該当行のAからAE列までオレンジに塗りつぶす 2 2022/07/02 10:18
- Excel(エクセル) Excelのマクロについて 2 2022/06/14 03:38
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
エクセルVBAのIF文の否定の複数条件
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・ちょっと先の未来クイズ第5問
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
On ErrorでエラーNoが0
-
文字列内で括弧を使うには
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
ApplicationとWorksheetFunctio...
-
マクロで"#N/A"のエラー行を削...
-
String""から型'Double'への変...
-
実行時エラー 438 の解決策をお...
-
お助けください!VBAのファイル...
-
Excel vbaについての質問
-
VB6とVB.NETでNullの扱いが違う?
-
VBA データ(特定値)のある最...
-
LaTeXのエラーについて(コンパ...
-
レコード登録時に「演算子があ...
-
「インページ操作の実行エラー...
-
シングルクォーテーションを含...
-
ADO 「認証に失敗しました」
-
実行時エラー´5854´ 文字列型パ...
-
エラー発生件数と発生率
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
文字列内で括弧を使うには
-
お助けください!VBAのファイル...
-
On ErrorでエラーNoが0
-
VBA データ(特定値)のある最...
-
マクロで"#N/A"のエラー行を削...
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
「実行時エラー '3167' レコー...
-
フランスの生年月日(jj/mm/aaaa)
-
Filter関数を用いた結果、何も...
-
実行時エラー 438 の解決策をお...
-
ACCESSで値を代入できないとは?
-
【Access】Excelインポート時に...
-
【VBAエラー】Nextに対するFor...
-
【VB.NET】 パワポ操作を非表示で
-
VBでSQL文のUPDATE構文を使った...
おすすめ情報