• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セルの時間入力について)

セルの時間入力について

このQ&Aのポイント
  • 00:00と入力すると最初は入力できますが、2回目の入力からセルが空になります。
  • 数字が入ると問題はありません。
  • 式の値は00:00:00となっています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

1回目と2回目の入力内容、 どのセルに入力したかなどを詳しく書いてください。 さらっと動かしましたが空うんぬんの意味がわかりません。 ' MsgBox "入力値が不正です。"の所を通れば空にしてるみたいですが 別にこれの事ではないんですよね? あと、Application.EnableEvents = Falseの位置が悪いので .Value = ""でイベントが走ります。直した方が良いと思いますよ。

hatokamome
質問者

お礼

ご回答ありがとうございます。 Application.EnableEvents = Falseは理解できました。 おそらくですが、セルの中書式がデフォルトで00:00:00になっており、 0や0000などは、すべて0時0分0秒と判断する仕様なのではないかと推測しています。 しかし、その00:00:00を消しマクロを書いて最初の実行時は00:00と書き込んでくれます。 セルの値も00:00:00ではなく、00:00になっています。 いったい何が起きているのでしょうか。

hatokamome
質問者

補足

いろいろ試して、以下のコードで完成いたしましあた。 書式設定を文字列にすると出来ました。 ありがとうございます。 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 'この行まで

関連するQ&A