電子書籍の厳選無料作品が豊富!

Sub Sample()
    Dim MyDate As String
    MyDate = "abc"
    MsgBox IIf(IsDate(MyDate) = True, CDate(MyDate), "?")
End Sub

質問者からの補足コメント

  • №1のrera様と同じく「?」になると予想していましたが、実行してみると、他の方々がおっしゃるようにエラーとなってしまいます。その理由が分からず、質問いたしました。

    「IsDate」とは「引数が日付形式かどうか」を判定するものなので、結果は「True」か「False」になりませんでしょうか。そして「abc」は「日付形式」ではないので、エラーではなく「False」になるのではないかと思うのですが、この考え方は間違っていますでしょうか。

      補足日時:2025/02/01 08:57

A 回答 (4件)

理由(重複していたらごめんなさい)


IIf は、True部分とFalse部分の両方が実行されたうえで(試験に出ますW)
判定条件に一致する結果を返します

したがって

IIf は、True部分 CDate(MyDate) と、False部分("?")の 両方を実行したうえで、
判定条件 IsDate(MyDate) の結果に応じて値を返すため
IsDate(MyDate) が False (今回) であっても、
CDate(MyDate) は実行され、エラーが発生します。

If .. else を使いましょう・・・

上記の理由でIIf の処理速度は遅いと聞くことがあります
    • good
    • 3
この回答へのお礼

解決しました

IIFには、そういう性質があるのですね! 納得です!
ありがとうございます。

お礼日時:2025/02/01 09:09

型が一致しないので、実行出来ずにエラーが出て終わり。

    • good
    • 1
この回答へのお礼

ありがとう

IsDate(MyDate) ではなく CDate(MyDate)の部分ですね!
ありがとうございます。

お礼日時:2025/02/01 09:07

こんばんは



試してみればわかることでは?

エラーが発生します。
エラーメッセージを見ればわかるでしょうけれど、原因は、文字列「abc」を日付として評価できないから。

IIfを通常のIf文で書き直せば、エラーは出なくなります。
    • good
    • 1
この回答へのお礼

ありがとう

IsDate(MyDate) ではなく CDate(MyDate)の部分ですね!
ありがとうございます。

お礼日時:2025/02/01 09:06

「?」が表示されますね。



"IsDate"で、"MyDate"の内容が日付形式のデータかを確認しているので、日付形式でないので"?"を表示する処理になります。
    • good
    • 1
この回答へのお礼

うーん・・・

私も同じ考えです。ですが、実行結果はエラーとなってしまうのです。その理由が知りたくて質問いたしました。

いち早くご回答いただき、ありがとうございました。

お礼日時:2025/02/01 09:06

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A