- ベストアンサー
エクセル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
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 簡素化という観点から外れて、ちょっと遊んでしまいました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 はちょとおもしろいかも^ ^
その他の回答 (12)
- mshr1962
- ベストアンサー率39% (7417/18945)
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
お礼
質問はFunctionの使い方のつもりでしたが、ありがとうございました。
- j_nishiz
- ベストアンサー率26% (183/697)
コードの美しさは個人の主観によって変わるので何とも言えませんが、Functionは複数に(細かく)分かれている方がスマートだと思いますよ。 組み合わせでいろいろ動かせますから。
お礼
Functionは複数に(細かく)分かれている方がスマートですか? ありがとうございました。
- 1
- 2
お礼
Timer関数、VBA.Array関数、演算子「\」 初めて勉強させていただきました。 有難うございます。