• ベストアンサー

エクセル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% (7418/18948)
回答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/17068)
回答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

  • Select Caseでlikeを使うには?

    Sub test() Dim s As String s = "aa*@yahoo.co.jp" Select Case s Case like "*yahoo*" MsgBox "yahoo" End Select End Sub をすると、コンパイルエラーになるのですが 「yahoo」と言う文字を含むのなら とするにはどうすればいいでしょう?

  • select case 大文字小文字を区別しないよ

    select case 大文字小文字を区別しないようにするには? Sub test01() Dim str As String str = "A" Select Case str Case "a" MsgBox "aです" Case "A" MsgBox "aです" End Select End Sub これだと、半角全角がヒットしないのはなんとなくしょうがないかな、と思うのですが 大文字小文字がちがくてもヒットさせるにはどうすればいいですか? Sub test01() Dim str As String str = "A" Select Case str Case "a", "A" MsgBox "aです" End Select End Sub とするしかないでしょうか? 大文字小文字区別なく評価する方法があれば教えてください。よろしくお願いします。

  • Select Caseステートメント 「Is」

    VBAについて質問です。 http://excelvba.pc-users.net/fol6/6_2.html の Sub test() Dim intPoint As Integer intPoint = InputBox("点数を入力してください") Select Case intPoint Case Is >= 80 MsgBox "優です。" Case Is >= 70 MsgBox "良です。" Case Is >= 60 MsgBox "可です。" Case Else MsgBox "再テストです。" End Select End Sub は、 なぜ Sub test2() Dim intPoint As Integer intPoint = 75 Select Case intPoint Case intPoint >= 80 MsgBox "優です。" Case intPoint >= 70 MsgBox "良です。" Case intPoint >= 60 MsgBox "可です。" Case Else MsgBox "再テストです。" End Select End Sub では、だめなのでしょうか? test2を実行すると、 Case Elseの MsgBox "再テストです。" になってしまいます。 本当は、"良です。"が正しいのに。 testをF8でステップインしながら実行した時に、 「Case Is >= 80」 の来た時に、isにカーソルをあてても、InputBoxで入力した数値が表示されません。 なぜ、この場合、Case intPoint >= 80 ではダメなのか理由をご教授ください。ご回答よろしくお願いします。

  • VBAでFunctionの使い方

    エクセルのVBAでFunctionの使い方がいまいちよくわかりません。 Function msg() Dim h As Integer h = Hour(Time) Select Case h Case Is < 12: msg = "おはようございます。" Case Is < 17: msg = "こんにちは。" Case Else: msg = "こんばんは。" End Select End Function Sub 挨拶() MsgBox msg End Sub とやってみたら一応正しく動くようですが、これであっているのでしょうか? 他の例などを見るとFunction msg()の()内にも何か入れなければならないようなのですが、わかりません。

  • VBAでワイルドカードを使った文字列検索

    初めて投稿いたします。 環境は、WinXP Access2000 下記のVBAモジュールで、文字列検索がヒットしません。 数字の比較でヒットするのはナゼでしょうか? ちなみに、変数に導入したのは、全角半角どちらも入れてみました。 この疑問・・・どなたか解決お願いします。 Sub TEST() Dim AAA As String Dim BBB As String Dim YYY As String AAA = "0" BBB = "2" YYY = AAA & BBB Select Case YYY Case "0*" MsgBox "ココを通り過ぎないで!" Case "15" MsgBox "やったね" Case Is > 0 MsgBox "なぜかココでヒットします??" End Select End Sub

  • Excel Select Case で変数を使うと表示されない。

    Sub test1() Dim Fruits As String Dim Iro As String Sheets("Sheet1").Select Fruits = Range("A1").Value Iro = Range("B1").Value Select Case Fruits Case Is = "みかん" Iro = "オレンジ" End Select End Sub とすると、何の反応もありませんが、 Iro = "オレンジ" の箇所を Range("B1") = "オレンジ" とするときちんと表示されます。 なぜ変数ではダメなのでしょうか?

  • EXCELのVBAでのSelectとActivateの違い

    VBAの初心者です。 ExcelのVBAでメッセージを表示してシートを切換えるというのを作りたいのです。 見真似で作成したのが↓です。 Dim rtn As String rtn = MsgBox("シートを切換えますか", vbYesNo, "シートの切替") If rtn = vbYes Then Worksheets("送付先一覧").Activate Range("a1").Select Else Exit Sub End If 動作確認はできましたが、上記の「Activate」を「Select」に変更しても特に動作異常がありません。 そこで、疑問ですが、「Activate」と「Select」ってどうやって使い分けるのでしょうか?

  • Select Caseでorは使えないのでしょうか?

    Sub TEST() 文字 = "あ" Select Case 文字 Case "あ" Or "い" MsgBox "「あ」もしくは「い」です。" End Select End Sub これだとエラーになるのですが ケースが「あ」もしくは「い」の場合は同じ処理をしたい場合はどうすればいいのでしょうか? Sub TEST() 文字 = "あ" Select Case 文字 Case "あ" MsgBox "「あ」もしくは「い」です。" Case "い" MsgBox "「あ」もしくは「い」です。" End Select End Sub このコードをまとめるはどうすればいいのでしょうか? よろしくお願い致します。

  •  シートのセレクトのしかたを

     シートのセレクトのしかたを  教えてください  下記のようなマクロを途中まで作りましたが  うまく動作しません  メッセージボックスには  Sheet8.Select と表示されますが  実際にシート8をセレクトしたいのです  どの様に書けばよいのかお教え下さい Sub Maco11() Dim ex As String Dim ey As String ex = ActiveWorkbook.Sheets.Count ey = "Sheet" & ex & ".Select" MsgBox ey ' ここにどの様に書けば良いのでしょうか End Sub

  • エクセルVBAの Select Case構文

    Range("A1")に数式が入っています。 Select Caseで エラーだった場合 計算結果が正数だった場合 計算結果が負数だった場合 計算結果が"特定の文字"だったばあい その他 で分岐したいのですが、どのように記述すればよいのでしょうか? 以下、わたしの失敗例です。AAAでもプラスと出てしまいます。エラー値の判別がわかりません。 Sub TEST() Select Case Cells(1, 1) Case Is > 1: MsgBox "プラス" Case Is < 0: MsgBox "マイナス!" Case "AAA": MsgBox "AAA" Case Else: MsgBox "やり直し" End Select End Sub

専門家に質問してみよう