- ベストアンサー
VBAの時間入力について
- VBAの時間入力について
- VBAを使用して時間を文字列で入力する方法を学びましたが、00:00も入力する方法がわかりません。
- 指定した条件で入力された時間が正しい形式で表示されるようにするVBAプログラムを作成したいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.3です! たびたびごめんなさい。 No.3のコードで1行抜けていました。 >End Select と >End With の間に >.NumberFormatLocal = "hh:mm" を追加してください。 そうしないと表示形式は h:mm のままになってしまいます。 ※ この場合2400 も 0 もどちらも 00:00 と表示されてしまいます。 24:00 を表示させたい場合は [hh]:mm としてみてください。 何度も失礼しました。m(_ _)m
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 前回回答した者です。 実は投稿後に1桁の場合の処理をしていないのに気付き、 もう一度投稿しようと思いコードを訂正して投稿しようとすると すでに締め切られていたので・・・ おそらく今回の質問のような問題が出るのではないかと思っていました。 もう一度コードを載せてみます。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から If Intersect(Target, Columns(12)) Is Nothing Or Selection.Count <> 1 _ Or Not IsNumeric(Target) Then Exit Sub If Target <= 2400 And Target Mod 100 < 60 Then Application.EnableEvents = False With Target Select Case Len(Target) Case 1 .Value = "0:0" & Target Case 2 .Value = "0:" & Target Case 3 .Value = Left(Target, 1) & ":" & Right(Target, 2) Case Else .Value = Left(Target, 2) & ":" & Right(Target, 2) End Select End With Application.EnableEvents = True Else MsgBox "入力値が不正です。" With Target .Value = "" .Select End With Exit Sub End If End Sub 'この行まで 当然のことながら、マイナスの入力は考慮していません。 こんな感じではどうでしょうか? ※ 他の方だともっとスマートなコードにされるかもしれませんが、この程度しか思いつきません。 参考になりますかね?m(__)m
- mt2008
- ベストアンサー率52% (885/1701)
ANo.1です。 ごめんなさい、よく見たら「入力値が不正です」メッセージを出すときは Application.EnableEvents = False を通っていませんでしたね。 後半の話は無視してください。
- mt2008
- ベストアンサー率52% (885/1701)
元の質問を見ていませんので、何か条件があるのかもしれませんが、ご提示のコードでは「0000」を入力→「00:00」はうまくいきそうですが、3ケタ以下の数値の場合おかしくありませんか? 最初の With Target ~ End With までの間を↓の様にしてはいかがでしょう With Target sTime = Format(.Value, "0000") .Value = TimeValue(Left(sTime, 2) & ":" & Right(sTime, 2)) .NumberFormatLocal = "hh:mm" End With また、「入力値が不正です。」と言うメッセージを表示した後、 Application.EnableEvents = True にしていないので、一度メッセージが表示されるとイベントが発生しないままになっています。 2つ目のWith Target ~ End With(メッセージ表示後に、入力値を消しているところ)の後に Application.EnableEvents = True を入れたほうがよいと思います。
お礼
お返事遅くなり申し訳ございませんでした。 このコード理解できました。 いろいろ調べVBAの読み方が少し司会でいました。 この調子て勉強していきたいくなりました。 解決いたしました。 皆さんありがとうございます。