- ベストアンサー
エクセル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
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
設定の順番が間違えてます。これでは"おはようございます"は表示されません。 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
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
私もよく勘違いします。 Select Case 何々 Caseの後は、何々なしで、値を書けば良い。 (A)「値」にピッタリのものを目指す時は、値だけを 記述 しかしなぜか (B)(=を除き)比較演算子<などを使うときは IS(IS演算子)が要る。 深い理由はあるのだろうが、無しにして欲しいと思ったものです。 余分ですが、他の言語などでは、時刻を定数として表現する場合に#で囲む必要があったりで、要注意。
お礼
> 比較演算子<などを使うときは > IS(IS演算子)が要る。 不思議ですねえ。 ありがとうございました。
- kaekaekaede
- ベストアンサー率34% (11/32)
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 ってのでどうでしょう?
お礼
ありがとうございます。 でも、この順番だと「おはよう」がでないのじゃありません?
- project-a
- ベストアンサー率54% (107/195)
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
お礼
あら! シンプルですね! 出来ました。 ありがとうございます♪
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 String対Stringって、比較できるんですか? (^^ゞ
補足
え? String対Stringの比較になってます?
補足
> 時間は小数に直すか、分数にした方が間違いないです。 12時=24時*1/2 16時=24時*2/3 ですね?ここまではわかりました。 でも、すみません。なぜなの? もう1点 > 設定の順番が間違えてます。 Case Is < 2 / 3 を先に持ってくると 1 / 2もこれにはいってしまい、これで変数MGが「こんにちは」に決定してしまうということですね?