VBAで入退室プログラミングをしたいのですが教えて下さい。 作成したプログラムは以下です。 数値をA1のセルに入れるとB列にTimeが入るプログラムです。

VBAで入退室プログラミングをしたいのですが教えて下さい。 作成したプログラムは以下です。 数値をA1のセルに入れるとB列にTimeが入るプログラムです。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If Application.Intersect(Range("A1:A100"), Target) Is Nothing Then Exit Sub If .Count > 1 Then Exit Sub If IsEmpty(.Value) Then .Offset(, 1).ClearContents Else .Offset(, 1).Value = Time End If End With End Sub したいことは、入退室管理のようなことです。QRコードを使って1度目を入力、A列にはQRの数値が、B列に入室Timeが。同じQRコードで2度目を入力すると、A列の数値を検索し同じ数値があればC列に退室Timeが。同じQRコードで3度目はC列に退室Timeがあるので1度目と同じことを。 1度目の入室Time表示は上記のVBAでできたのですが、2度目、3度目のところがまったくわかりません。宜しくお願いします。 A列 B列 C列 101 9:50 10:10 ←2度目 102 9:55 ←1度目 103 10:05 ←1度目 101 13:10 ←3度目

Visual Basic29閲覧xmlns="http://www.w3.org/2000/svg">100

ベストアンサー

0

設計に無理があるような気もしますが、 これで一応希望通りの動きになるのでは? Private Sub Worksheet_Change(ByVal Target As Range) Dim f, r As Range With Target If Application.Intersect(Range("A1:A100"), Target) Is Nothing Then Exit Sub If .Count > 1 Then Exit Sub If IsEmpty(.Value) Then .Offset(, 1).ClearContents .Offset(, 2).ClearContents Else If .Row > 1 Then Set f = Range("A1:A" & .Row - 1).Find(.Value, LookAt:=xlPart) If Not (f Is Nothing) Then Set r = f Do If r.Offset(0, 2).Value = "" Then r.Offset(0, 2).Value = Time .ClearContents .Offset(0, 0).Select Exit Sub End If Set r = Range("A1:A" & .Row - 1).FindNext(r) Loop While f.Row <> r.Row End If End If .Offset(, 1).Value = Time End If End With End Sub

ThanksImg質問者からのお礼コメント

typさん、有難うございます。出来ました。 findメソッドにLoop Whileステートメントなのですね。 あることは分かっていてもどこでどのように使うか、使い方が分かっておらず大変勉強になりました。もっと勉強をして使えるようになりたいと思っています。 有難うございました。ばんざーい!!これでゆっくり寝られます。

お礼日時:3/30 17:20