以下のコードで
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 'この行まで
No.1ベストアンサー
- 回答日時:
1回目と2回目の入力内容、
どのセルに入力したかなどを詳しく書いてください。
さらっと動かしましたが空うんぬんの意味がわかりません。
' MsgBox "入力値が不正です。"の所を通れば空にしてるみたいですが
別にこれの事ではないんですよね?
あと、Application.EnableEvents = Falseの位置が悪いので
.Value = ""でイベントが走ります。直した方が良いと思いますよ。
この回答への補足
いろいろ試して、以下のコードで完成いたしましあた。
書式設定を文字列にすると出来ました。
ありがとうございます。
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 'この行まで
ご回答ありがとうございます。
Application.EnableEvents = Falseは理解できました。
おそらくですが、セルの中書式がデフォルトで00:00:00になっており、
0や0000などは、すべて0時0分0秒と判断する仕様なのではないかと推測しています。
しかし、その00:00:00を消しマクロを書いて最初の実行時は00:00と書き込んでくれます。
セルの値も00:00:00ではなく、00:00になっています。
いったい何が起きているのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba 実数および実数タイプの変...
-
Excelのマクロについて教えてく...
-
VBA レジストリの値の読み方に...
-
ExcelのVBAコードについて教え...
-
Excel マクロについての相談
-
Excel VBA 定義されたプロージ...
-
Vba SelStart、SelLen教えてく...
-
エクセルのマクロについて教え...
-
VBAに詳しい方教えてください。
-
VBAの質問になります メッセー...
-
ユーザーフォームに別シートか...
-
2つのマクロでチェックボックス...
-
VBA listBoxから
-
VBA初心者 Ctrl+での操作、ボタ...
-
VBA 複数条件の分岐処理の上手...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
左右の表のキー位置を合わせたい
-
VBAの質問になります Userform内で
-
Excelについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBA 定義されたプロージ...
-
Excel-VBAのmsgBox()の不思議
-
【VBA】マクロの入ったファイル...
-
VBA 複数条件の分岐処理の上手...
-
現在のブックを閉じないで、マ...
-
VBAで各列の"+"と"o"の合計数を...
-
VBAに詳しい方教えてください。
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ユーザーフォームに別シートか...
-
エクセルのマクロについて教え...
-
ExcelVBA シート名を複数セルか...
-
エクセルのマクロについて教え...
-
VBA listBoxから
-
Excelのマクロについて教えてく...
-
エクセルのマクロについて教え...
おすすめ情報