電子書籍の厳選無料作品が豊富!

エクセルのセルに時間を入力すると、デフォルトでコロンを入れなければなりません。

また、時間が一桁だと2ケタではなく1ケタになってしまいます。

つまり、800と入力して「08:30」となるようにしたいです。

方法ご存知か方がおられましたら教えてください。
よろしくお願い致します。

A 回答 (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
    • good
    • 0
この回答へのお礼

すごいです。
JavaのPOIでの操作経験がなくとても参考になりました。
VBA勉強しようと決心しました。
ありがとうございました。

お礼日時:2012/03/07 22:33

》 …文字列型でHH:mmのフォーマット



「文字列型」とは具体的にどういうことですか?
    • good
    • 0
この回答へのお礼

文字列の変数の型の事だったのですが、NO123の解答で完璧に解決いたしました。
ご回答ありがとうございました。

お礼日時:2012/03/07 22:30

エクセルでは時間も数値で、表現方法が違うだけです。


普通の数値で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 とします。
    • good
    • 0
この回答へのお礼

ご回答解りやすく感謝しております。
コロンを入れてする方法が参考になりました。
計算ではなく文字列として外部プログラムから読み時間計算する目的です。
ありがとうございました。

お礼日時:2012/03/07 22:28

こんばんは!


質問内容を取り違えていたらごめんなさい。

>つまり、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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!