- ベストアンサー
エクセルのセルに文字列型でHH:mmのフォーマット
エクセルのセルに時間を入力すると、デフォルトでコロンを入れなければなりません。 また、時間が一桁だと2ケタではなく1ケタになってしまいます。 つまり、800と入力して「08:30」となるようにしたいです。 方法ご存知か方がおられましたら教えてください。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.1です! たびたびごめんなさい。 前回は2桁の場合の処理をしていませんでした。 もう一度訂正したコードを載せておきます。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から If Intersect(Target, Columns(1)) 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 If Len(Target) = 2 Then .Value = 0 & ":" & Right(Target, 2) '←この行を追加しました。 ElseIf Len(Target) = 3 Then .Value = Left(Target, 1) & ":" & Right(Target, 2) Else .Value = Left(Target, 2) & ":" & Right(Target, 2) End If .NumberFormatLocal = "hh:mm" End With Application.EnableEvents = True Else MsgBox "入力値が不正です。" With Target .Value = "" .Select End With Exit Sub End If End Sub 'この行まで 検証せずに投稿してごめんなさいね。 何度も失礼しました。m(_ _)m
その他の回答 (3)
》 …文字列型でHH:mmのフォーマット 「文字列型」とは具体的にどういうことですか?
お礼
文字列の変数の型の事だったのですが、NO123の解答で完璧に解決いたしました。 ご回答ありがとうございました。
- m_and_dmp
- ベストアンサー率54% (987/1817)
エクセルでは時間も数値で、表現方法が違うだけです。 普通の数値で0を時間で表すと(表示形式を yyyy/m/d h:mmとする)1900/1/0 0:00です。(1月0日というのは世の中には存在しないですが、エクセルではそうなっています。) 数値の1は時間では1日に相当します。したがって、8:00(1900/1/0/ 8:00)は、24分の8(=0.3333・・・・)に等しくなります。試しに0.33333と入力して、表示形式を時間に変更してみてください。 普通の数値800を表示形式を 00":"00 とすることにより、表示上08:00とすることはできますが、これはあくまでも800であって、8時間ではありませんので、時間の計算をすることはできません。 4:30(=430)+4:30(=430)は、8:60(=860)になってしまいます。 したがって、コロンを入力しないで時間を入力することはできないと思います。コロンを入力することによって表示形式が自動的に h:mm に変わるのです。 コロンの入力の省略はあきらめていただけるなら、8:30ではなく08:00と表示するには、表示形式を hh:mm にします。 24時間で繰り上がって0に戻るのがいやなら、[hh]:mm とします。
お礼
ご回答解りやすく感謝しております。 コロンを入れてする方法が参考になりました。 計算ではなく文字列として外部プログラムから読み時間計算する目的です。 ありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 質問内容を取り違えていたらごめんなさい。 >つまり、800と入力して「08:30」となるようにしたいです の部分は 830と入力して08:30 となるようにしたい!と解釈しました。 VBAになってしまいますが・・・ 一例です。 SheetのA列に数値を入力するとします。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてA列に数値を入力してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から If Intersect(Target, Columns(1)) 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 If Len(Target) = 3 Then .Value = Left(Target, 1) & ":" & Right(Target, 2) Else .Value = Left(Target, 2) & ":" & Right(Target, 2) End If .NumberFormatLocal = "hh:mm" End With Application.EnableEvents = True Else MsgBox "入力値が不正です。" With Target .Value = "" .Select End With Exit Sub End If End Sub 'この行まで こういったコトをご希望だったのでしょうか? 的外れならごめんなさいね。m(_ _)m
お礼
すごいです。 JavaのPOIでの操作経験がなくとても参考になりました。 VBA勉強しようと決心しました。 ありがとうございました。