Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
if分で土日以外を
投稿日時: 22/02/25 14:46:44
投稿者: zero2

土日以外を表したくて
 
if Weekday(Now) <> vbSaturday then
    if Weekday(Now) <> vbSunday then
       実行文
    end if
end if
としましたが、このifの部分を一つにできないでしょうか?
 
 if Weekday(Now) <> vbSaturday and Weekday(Now) <> vbSunday then としてもダメでした。
 if Weekday(Now) <> vbSaturday or Weekday(Now) <> vbSunday then これもダメです
 
お教えください。
 

回答
投稿日時: 22/02/25 15:08:13
投稿者: simple

>if Weekday(Now) <> vbSaturday and Weekday(Now) <> vbSunday then としてもダメでした。
良いと思いますが、
・想定はこうだが、
・実際はこんなことになってしまう、
と具体的に説明してもらえませんか?

回答
投稿日時: 22/02/25 17:49:19
投稿者: WinArrow
投稿者のウェブサイトに移動

土日以外を判断するいくつかの方法
 
曜日を判定する目的ならば
>Now
より
Date
の方が分かりやすいと思います。
 
 
'方法1
    If Not (Weekday(Date) = vbSaturday Or Weekday(Date) = vbSunday) Then
 
'方法2
    If Weekday(Date, 2) < vbSaturday Then
  
'方法3
    If Not (Format(Date, "aaa") = "土" Or Format(Date, "aaa") = "日") Then
 
まだ、いろいろな方法があるので、勉強してみるとよいでしょう。

回答
投稿日時: 22/02/25 18:11:46
投稿者: WinArrow
投稿者のウェブサイトに移動

>if Weekday(Now) <> vbSaturday and Weekday(Now) <> vbSunday then としてもダメでした。
は、実際のコードと違っているものと思います。
これ、手入力ですよね?
 
この掲示板にコードを記載する際は
手入力ではなく、コードペインからコピペしてください。
 

投稿日時: 22/02/25 18:55:22
投稿者: zero2

回答ありがとうございます。
 
テストとして、実行文にMsgboxを表示するようにしても、たとえば今日(金)でもMsgboxが表示されません。
 
 
これだと動きます。
 
if Weekday(Now) = vbSaturday or Weekday(Now) = vbSunday then
 空白
else
 実行文
end if
 
と同じ事がしたいのです。

回答
投稿日時: 22/02/26 17:49:12
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
テストとして、実行文にMsgboxを表示するようにして

  
この時のコード(IF文だけ)を掲示してもらえませんか?
手入力ではなくコードペインからコピペで・・・

投稿日時: 22/02/26 19:41:58
投稿者: zero2

書いたコードは
 
if Weekday(Now) = vbSaturday or Weekday(Now) = vbSunday then
else
  Msgbox "Test"
end if
 

 
if Weekday(Now) <> vbSaturday and Weekday(Now) <> vbSunday then
  Msgbox "Test"
end if
 
です。
 
よろしくお願いいたします。

回答
投稿日時: 22/02/26 20:21:24
投稿者: WinArrow
投稿者のウェブサイトに移動

zero2 さんの引用:
書いたコードは
 
if Weekday(Now) = vbSaturday or Weekday(Now) = vbSunday then
else
  Msgbox "Test"
end if
 

 
if Weekday(Now) <> vbSaturday and Weekday(Now) <> vbSunday then
  Msgbox "Test"
end if
 
です。
 
よろしくお願いいたします。

これは、掲示板に手入力していますよね?
コードを手入力しないようにお願いしたはずですが・・・・
実際に動いているコードでないと、どこに問題があるか?
判断できません。

回答
投稿日時: 22/02/26 23:00:49
投稿者: VBA-stepup

横入失礼します。
 
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つでも条件に合えば、全部をチェックされることは無いと思っていました。

投稿日時: 22/02/27 10:19:34
投稿者: zero2

>これは、掲示板に手入力していますよね?
>コードを手入力しないようにお願いしたはずですが・・・・
>実際に動いているコードでないと、どこに問題があるか?
>判断できません。
 
初心者でご指摘の内容がよく理解できないのですが、手入力せずテストしているコードをそのままコピペしています。

回答
投稿日時: 22/02/27 10:34:04
投稿者: simple

VBE(エディター)から直接コピーペイストすれば
if だとかandなどという小文字には
絶対になりませんよ。
いい加減なことを言わないで頂きたいですね。
 
ひょっとして
どこかでnowという変数を宣言していませんか?
そうとでも解釈しないと
あなたいうような異常なことにはなりません。

回答
投稿日時: 22/02/27 10:34:07
投稿者: WinArrow
投稿者のウェブサイトに移動

zero2 さんの引用:

初心者でご指摘の内容がよく理解できないのですが、手入力せずテストしているコードをそのままコピペしています。

 
実際に実行しているコードでしら
 
if
and
then
end if
の先頭文字は、大文字になるはずです。
 
ところで、掲示のコードで実行しているとして、
こちらでテストしても、同様の現象は発生しません。
お伝えしておきます。
 

投稿日時: 22/02/27 11:31:08
投稿者: zero2

すいません、ここはVBAに関するフォーラムですね。
自分はvbsファイルを作成して試していました。
質問する場所を間違えています。
 
申し訳ありません。
 
皆様の回答を参考に試してみます。
 
ありがとうございました。