横入失礼します。
If文の条件分岐
And条件
If 条件A And 条件B 真ですか
真(条件A と 条件B 両方真であるときのみ 真)
Else
偽(条件A と 条件B どちらか片方が真であっても 偽)
End If
Or条件
If 条件A Or 条件B 真ですか
真(条件A と 条件B どちらか片方が真であれば 真)
Else
偽(条件A と 条件B 両方偽であるときのみ 偽)
End If
Not付加And条件
If Not 条件A And 条件B 偽ですか (Notを付けることによって否定文になる)
真(条件A と 条件B 両方偽であるときのみ 真)
Else
偽(条件A と 条件B どちらか片方が偽であっても 偽)
End If
Not付加Or条件
If Not 条件A Or 条件B 偽ですか (Notを付けることによって否定文になる)
真(条件A と 条件B どちらか片方が偽であれば 真)
Else
偽(条件A と 条件B 両方偽であるときのみ 偽)
End If
上記を踏まえ以下を試してください
Sub test()
Dim MyDay As Date
MyDay = Application.InputBox(prompt:="日付を入力してください", _
Title:="日付入力", _
Default:=Date)
If Weekday(MyDay) = vbSaturday Or Weekday(MyDay) = vbSunday Then
MsgBox MyDay & "は" & Format(MyDay, "aaaa") & "ですので真です。"
Else
MsgBox MyDay & "は" & Format(MyDay, "aaaa") & "ですので偽です。"
End If
End Sub
Sub test1()
Dim MyDay As Date
MyDay = Application.InputBox(prompt:="日付を入力してください", _
Title:="日付入力", _
Default:=Date)
If Not Weekday(MyDay) = vbSaturday Or Weekday(MyDay) = vbSunday Then
MsgBox MyDay & "は" & Format(MyDay, "aaaa") & "ですので真です。"
Else
MsgBox MyDay & "は" & Format(MyDay, "aaaa") & "ですので偽です。"
End If
End Sub
Sub test2()
Dim MyDay As Date
MyDay = Application.InputBox(prompt:="日付を入力してください", _
Title:="日付入力", _
Default:=Date)
If Weekday(MyDay) <> vbSaturday And Weekday(MyDay) <> vbSunday Then
MsgBox MyDay & "は" & Format(MyDay, "aaaa") & "ですので真です。"
Else
MsgBox MyDay & "は" & Format(MyDay, "aaaa") & "ですので偽です。"
End If
End Sub
Sub test3()
Dim MyDay As Date
MyDay = Application.InputBox(prompt:="日付を入力してください", _
Title:="日付入力", _
Default:=Date)
If Weekday(MyDay) <> vbSaturday Or Weekday(MyDay) <> vbSunday Then
MsgBox MyDay & "は" & Format(MyDay, "aaaa") & "ですので真です。"
Else
MsgBox MyDay & "は" & Format(MyDay, "aaaa") & "ですので偽です。"
End If
End Sub
If文を1行にしたい理由は何でしょうか?
自分は極力And条件やOr条件を付けづに入れ子で対応しています。
その方が可読性がよくなるからです。
またこのような意見もありました。
引用:
引用:
昔、simpleさんから教えて頂いたことですが、
VBAは、複数の「or」条件の「if文」は、その全部がチェックされる
それまで、私は、1つでも条件に合えば、全部をチェックされることは無いと思っていました。