エクセルVBAについての質問です。 以下の処理についてコードをご教示いただきたたいです。
エクセルVBAについての質問です。 以下の処理についてコードをご教示いただきたたいです。 ・級情報シートで級が6級以上の社員が休日と平日の特定の時間(午前0時~午前5時)に勤務した場合にフラグ1を入力。 ・休日の判定は通常の週休日+祝日シートにある日にちで判定。 ・級情報シートと祝日シートはともにA列から始まります。
Excel | Visual Basic・124閲覧
ベストアンサー
下記でやってみて結果をお知らせ下さい。 Sub test() Dim rng1 As Range, rng2 As Range Dim r As Long Dim ck As Variant Dim wdate As Date Dim stime As Date, etime As Date With Worksheets("級情報") Set rng1 = .Range("A2:C" & .Cells(Rows.Count, 1).End(xlUp).Row) End With With Worksheets("祝日") Set rng2 = .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row) End With With Worksheets("勤務時間") For r = 2 To .Cells(Rows.Count, 1).End(xlUp).Row ck = Application.VLookup(.Cells(r, 1).Value, rng1, 3, 0) If IsError(ck) = False Then If ck >= 6 Then '休日か平日の特定の時間 wdate = Int(.Cells(r, 3).Value) stime = TimeSerial(Hour(.Cells(r, 3).Value), Minute(.Cells(r, 3).Value), 0) etime = TimeSerial(Hour(.Cells(r, 4).Value), Minute(.Cells(r, 4).Value), 0) If Weekday(wdate, 2) > 5 Or WorksheetFunction.CountIf(rng2, wdate) _ Or (Weekday(wdate, 2) < 6 And _ ((stime >= TimeSerial(0, 0, 0) And stime <= TimeSerial(5, 0, 0)) _ Or (etime >= TimeSerial(0, 0, 0) And etime <= TimeSerial(5, 0, 0)))) Then .Cells(r, 5).Value = 1 End If End If End If Next r End With End Sub
1人がナイス!しています
質問者からのお礼コメント
すごすぎます! どうやったらこんなコードを思いつくのでしょうか。。。 とても勉強になります!ありがとうございました!
お礼日時:6/29 23:21