• ベストアンサー

エクセルVBAのFunction簡素化したいのです・・・。

時間により挨拶の内容を変えるCODEを作りました。一応、当初の目的どおりのは答えを返すのですが、時間と分で2つFunctionが出来てしまいます・・・・。 あと、もっとスマートなやり方はないものかと質問させていただきました。 くだらないと思われそうですがなにとぞよろしくお願いします。 Sub 挨拶test() MsgBox hmsg(Time) & Chr(10) & messe(Time), , "*・゜゜・*:.。. .。.:*・゜゜・*" End Sub Function messe(t) As String t2 = Hour(t) t3 = Hour(TimeValue(t) + TimeValue("01:00")) m = Minute(t) Select Case m Case Is < 15: messe = t2 & "時を回りましたね。 。(^o^)/" Case Is < 30: messe = "もうすぐ" & t2 & "時半になりますね。 (〃^∇^〃) " Case Is < 45: messe = t2 & "時半を過ぎてますね。 (=´▽`)ゞ" Case Else: messe = "もうすぐ" & t3 & "時になるんですね。(^∇^)" End Select End Function Function hmsg(t) As String Select Case Hour(t) Case Is <= 11: hmsg = "おはようございます。" Case Is < 17: hmsg = "こんにちは。" Case Else: hmsg = "こんばんは。" End Select hmsg = UCase(Environ("UserName")) & "さん、" & hmsg End Function

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

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答No.7

こんにちは。 簡素化という観点から外れて、ちょっと遊んでしまいましたm(_ _)m Sub try()   Dim q, w, e, r   Dim t  As Single   Dim h  As Long   Dim m  As Long   Dim x  As Long   Dim i  As Long      q = VBA.Array("", "おはようございます。", "こんにちは。", "こんばんは。")   w = VBA.Array("もう0時ですよ。 早く寝ましょうよ。", _          "0時を回りましたね。", "もうすぐ0時半になりますね。", _          "0時半を過ぎてますね。", "もうすぐ0時になるんですね。")   e = VBA.Array("(T_T)", " 。(^o^)/", " (〃^∇^〃)", " (=´▽`)ゞ", "(^∇^)")   r = Array(0, 5, 12, 17)      t = Timer   h = t \ 3600   x = CLng(Application.Match(h, r)) - 1   If x > 0 Then     m = (t \ 900) Mod 4 + 1     i = Int(Rnd * 4) + 1   End If   If m = 4 Then h = h + 1   MsgBox UCase(Environ("UserName")) & "さん、" _       & q(x) & vbLf & Format(h, w(m)) & e(i), _       Title:="*・゜゜・*:.。. .。.:*・゜゜・*" End Sub 解り易いとも思えませんのであまりおすすめしません。 Timer使う必然性もないですし... #あ、でも Rnd はちょとおもしろいかも^ ^

merlionXX
質問者

お礼

Timer関数、VBA.Array関数、演算子「\」 初めて勉強させていただきました。 有難うございます。

その他の回答 (12)

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

Sub 挨拶test() Hx = Hour(Time) Mx = Minute(Time) '時間判定 Select case Hx Case Is <= 11: hmsg = "おはようございます。" Case Is < 17: hmsg = "こんにちは。" Case Else: hmsg = "こんばんは。" End Select '分判定 Select Case Mx Case Is < 15: messe = Hx & "時を回りましたね。 。(^o^)/" Case Is < 30: messe = "もうすぐ" & Hx & "時半になりますね。 (〃^∇^〃) " Case Is < 45: messe = Hx & "時半を過ぎてますね。 (=´▽`)ゞ" Case Else: messe = "もうすぐ" & Hx + 1 & "時になるんですね。(^∇^)" End Select 'メッセージ表示 MsgBox UCase(Environ("UserName")) & "さん、" & hmsg & Chr(10) & messe, , "*・゜゜・*:.。. .。.:*・゜゜・*" End Sub

merlionXX
質問者

お礼

質問はFunctionの使い方のつもりでしたが、ありがとうございました。

  • j_nishiz
  • ベストアンサー率26% (183/697)
回答No.1

 コードの美しさは個人の主観によって変わるので何とも言えませんが、Functionは複数に(細かく)分かれている方がスマートだと思いますよ。  組み合わせでいろいろ動かせますから。

merlionXX
質問者

お礼

Functionは複数に(細かく)分かれている方がスマートですか? ありがとうございました。

関連するQ&A