先日、時間を文字列で、HH:mmのフォーマット入力するPGを教えて頂き、
内容理解をしているのですがわからない部分があります。
★の部分の条件で、00:00も入力したいです。
ご存知か方がおられましたら教えてください。
よろしくお願い致します。
Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
'Intersect:http://officetanaka.net/excel/vba/tips/tips118.htm
'Is Nothing:nullではない
'Selection.Count <> 1:選択数が1以下ではない(<> :等しくない)
' Not IsNumeric(Target):数値ではない
If Intersect(Target, Columns(12)) Is Nothing Or Selection.Count <> 1 _
Or Not IsNumeric(Target) Then Exit Sub '
'Target:セルの値は24:00以下
'2つの数値の除算を行いし,その剰余を返す
'Mod:2つの数値の除算を行いし,その剰余を返す
'★ここで00:00時も入力したい。
If Target <= 2400 And Target Mod 100 < 60 Then '
Application.EnableEvents = False '
With Target '
If Len(Target) = 3 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 'この行まで
こんにちは!
前回回答した者です。
実は投稿後に1桁の場合の処理をしていないのに気付き、
もう一度投稿しようと思いコードを訂正して投稿しようとすると
すでに締め切られていたので・・・
おそらく今回の質問のような問題が出るのではないかと思っていました。
もう一度コードを載せてみます。
Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
If Intersect(Target, Columns(12)) 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
Select Case Len(Target)
Case 1
.Value = "0:0" & Target
Case 2
.Value = "0:" & Target
Case 3
.Value = Left(Target, 1) & ":" & Right(Target, 2)
Case Else
.Value = Left(Target, 2) & ":" & Right(Target, 2)
End Select
End With
Application.EnableEvents = True
Else
MsgBox "入力値が不正です。"
With Target
.Value = ""
.Select
End With
Exit Sub
End If
End Sub 'この行まで
当然のことながら、マイナスの入力は考慮していません。
こんな感じではどうでしょうか?
※ 他の方だともっとスマートなコードにされるかもしれませんが、この程度しか思いつきません。
参考になりますかね?m(__)m
お礼
お返事遅くなり申し訳ございませんでした。 このコード理解できました。 いろいろ調べVBAの読み方が少し司会でいました。 この調子て勉強していきたいくなりました。 解決いたしました。 皆さんありがとうございます。