アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のコードで
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 'この行まで

A 回答 (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 'この行まで

補足日時:2012/03/16 12:10
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/03/16 08:18

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