※ ChatGPTを利用し、要約された質問です(原文:セルの時間入力について)
セルの時間入力について
以下のコードで
00:00と入力すると最初は入力でいますが、
2回目の入力から、ユーザー定義でもhh:mmなのにセルが空になります。
数字が入ると問題有りません。
式の値(関数の入力)は00:00:00となっています。
どうか教えていただけませんでしょうか。
よろしくお願い致します。
Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
If Intersect(Target, Columns("L:M")) Is Nothing Or Selection.Count <> 1 _
Or Not IsNumeric(Target) Then Exit Sub
If Target <= 2359 And Target Mod 100 < 60 Then
Application.EnableEvents = False
'
' Debug.Print "Target.Address:" & Target.Address
' Debug.Print "Target.Address:" & Target.AddIndent
With Target
If Len(Target) = 4 Then
Debug.Print "Len(Target) = 4"
Debug.Print "Target:" & Target
Debug.Print "Len(Target):" & Len(Target)
.Value = Left(Target, 2) & ":" & Right(Target, 2)
ElseIf Len(Target) = 3 Then
Debug.Print "Len(Target) = 3"
Debug.Print "Target:" & Target
Debug.Print "Len(Target):" & Len(Target)
.Value = "0" & Left(Target, 1) & ":" & Right(Target, 2)
ElseIf Len(Target) = 2 Then
Debug.Print "Len(Target) = 2"
Debug.Print "Target:" & Target
Debug.Print "Len(Target):" & Len(Target)
.Value = "00:" & Right(Target, 2)
ElseIf Len(Target) = 1 And Target = 0 Then
Debug.Print "Len(Target) = 1 And Target=0"
Debug.Print "Target:" & Target
Debug.Print "Len(Target):" & Len(Target)
.Value = "00:00"
.Select
ElseIf Len(Target) = 1 Then
Debug.Print "Len(Target) = 1"
Debug.Print "Target:" & Target
Debug.Print "Len(Target):" & Len(Target)
.Value = "00:0" & Right(Target, 1)
End If
.NumberFormatLocal = "hh:mm"
End With
Application.EnableEvents = True
Else
' MsgBox "入力値が不正です。"
With Target
.Value = ""
.Select
End With
Exit Sub
End If
End Sub 'この行まで
お礼
ご回答ありがとうございます。 Application.EnableEvents = Falseは理解できました。 おそらくですが、セルの中書式がデフォルトで00:00:00になっており、 0や0000などは、すべて0時0分0秒と判断する仕様なのではないかと推測しています。 しかし、その00:00:00を消しマクロを書いて最初の実行時は00:00と書き込んでくれます。 セルの値も00:00:00ではなく、00:00になっています。 いったい何が起きているのでしょうか。
補足
いろいろ試して、以下のコードで完成いたしましあた。 書式設定を文字列にすると出来ました。 ありがとうございます。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から If Intersect(Target, Columns("L:M")) Is Nothing Or Selection.Count <> 1 _ Or Not IsNumeric(Target) Then Exit Sub If Target <= 2359 And Target Mod 100 < 60 Then Application.EnableEvents = False ' Debug.Print "Target.Address:" & Target.Address ' Debug.Print "Target.Address:" & Target.AddIndent With Target If Len(Target) = 4 Then Debug.Print "■Len(Target) = 4" Debug.Print "Target:" & Target Debug.Print "Len(Target):" & Len(Target) .Value = Left(Target, 2) & ":" & Right(Target, 2) ElseIf Len(Target) = 3 Then Debug.Print "■Len(Target) = 3" Debug.Print "Target:" & Target Debug.Print "Len(Target):" & Len(Target) .Value = "0" & Left(Target, 1) & ":" & Right(Target, 2) ElseIf Len(Target) = 2 Then Debug.Print "■Len(Target) = 2" Debug.Print "Target:" & Target Debug.Print "Len(Target):" & Len(Target) .Value = "00:" & Right(Target, 2) ElseIf Len(Target) = 1 And Target <> 0 Then Debug.Print "■Len(Target) = 1 And Target <> 0 Then" Debug.Print "Target:" & Target Debug.Print "Len(Target):" & Len(Target) .Value = "00:0" & Right(Target, 1) ElseIf Len(Target) = 1 And Target = 0 Then Debug.Print "■Len(Target) = 1 And Target = 0 Then" Debug.Print "Target:" & Target Debug.Print "Len(Target):" & Len(Target) .Value = "00:00" '★セルの書式設定は文字列にする。 End If .NumberFormatLocal = "hh:mm" End With Application.EnableEvents = True Else ' MsgBox "入力値が不正です。" With Target .Value = "" .Select End With Exit Sub End If End Sub 'この行まで