dポイントプレゼントキャンペーン実施中!

こんにちは。
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

A 回答 (4件)

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で継いでいるので、ネストにはなっていない
    • good
    • 0
この回答へのお礼

ネストしているときの処理がよくわかりました。
ありがとうございました。

お礼日時:2017/02/24 14:51

「if文について」の直接の回答ではないので皆さん避けておられますが、


条件が「tensuu」1つの場合は、
Select Case 構文がお勧めです。
http://excelvba.pc-users.net/fol6/6_2.html

不等号が条件に入るのならば、「Is」も必要になります。
数値の範囲指定ならば 「to」も使用できます。

また、[Select Case True]をつかえば、もっと複雑な複数条件への対応も楽になると思います。

以上、今後のマクロ作成の参考にしてください。
    • good
    • 0

もしかしてですが、


If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
If tensuu >= 80 Then
この記述が勘違いを生みやすいのでは?

不等号は向きを揃える習慣をつけた方が判りやすいと思います。
If 0 =< tensuu Then '①
If tensuu <= 100 Then '①´
If 80 =< tensuu Then

最初の不成立を見落とされたのでは?
見当違いならごめんなさい。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
IF文のなかにIF文があるときの処理がわからなかったために
ご質問をさせていただきました。
ご回答ありがとうございました。

お礼日時:2017/02/24 14:45

プログラム入力の際に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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
インデントはあまり意識しておりませんでした。
することによりって、かなりわかりやすくなりますね。
これをきに心がけてみようと思います。
ありがとうございました。

お礼日時:2017/02/24 14:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!