• ベストアンサー

エクセルVBA Select Case いついて

現在時間を判断してあいさつを出すVBAを書こうとしましたがうまくいきません。 どこが悪いのかご教示くださいませ。 Sub メッセージ() Dim MG As String Select Case Time Case Time < "16:00:00" MG = "こんにちは。" Case Time < "12:00:00" MG = "おはようございます。" Case Time >= "16:00:00" MG = "こんばんは。" End Select MsgBox MG End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

設定の順番が間違えてます。これでは"おはようございます"は表示されません。 Case の後はTimeではなくIs 時間は小数に直すか、分数にした方が間違いないです。 最後の条件はElseにすれば残った条件に対応します。 Sub メッセージ() Dim MG As String Select Case Time Case Is < 1 / 2 MG = "おはようございます。" Case Is < 2 / 3 MG = "こんにちは。" Case Else MG = "こんばんは。" End Select MsgBox MG End Sub

error123
質問者

補足

> 時間は小数に直すか、分数にした方が間違いないです。 12時=24時*1/2 16時=24時*2/3 ですね?ここまではわかりました。 でも、すみません。なぜなの? もう1点 > 設定の順番が間違えてます。 Case Is < 2 / 3 を先に持ってくると 1 / 2もこれにはいってしまい、これで変数MGが「こんにちは」に決定してしまうということですね?

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

私もよく勘違いします。 Select Case 何々 Caseの後は、何々なしで、値を書けば良い。 (A)「値」にピッタリのものを目指す時は、値だけを 記述 しかしなぜか (B)(=を除き)比較演算子<などを使うときは IS(IS演算子)が要る。 深い理由はあるのだろうが、無しにして欲しいと思ったものです。 余分ですが、他の言語などでは、時刻を定数として表現する場合に#で囲む必要があったりで、要注意。

error123
質問者

お礼

> 比較演算子<などを使うときは > IS(IS演算子)が要る。 不思議ですねえ。 ありがとうございました。

回答No.4

Sub メッセージ() Dim MG As String Select Case Time Case Is < "16:00:00" MG = "こんにちは。" Case Is < "12:00:00" MG = "おはようございます。" Case Is >= "16:00:00" MG = "こんばんは。" End Select MsgBox MG End Sub ってのでどうでしょう?

error123
質問者

お礼

ありがとうございます。 でも、この順番だと「おはよう」がでないのじゃありません?

  • project-a
  • ベストアンサー率54% (107/195)
回答No.2

case では判断文は使用できません。 以下のようにします。 ----------------------------------------- Dim MG As String Select Case Hour(Time)   Case 0 To 12     MG = "おはようございます。"   Case 13 To 16     MG = "こんにちは。"   Case Else     MG = "こんばんは。" End Select MsgBox MG

error123
質問者

お礼

あら! シンプルですね! 出来ました。 ありがとうございます♪

回答No.1

こんにちは。 String対Stringって、比較できるんですか? (^^ゞ

error123
質問者

補足

え? String対Stringの比較になってます?

関連するQ&A

専門家に質問してみよう