Saat Aralıklarından Vardiyadaki Çalışan Sayılarını Bulma

  • Konuyu başlatan Konuyu başlatan Qene
  • Başlangıç tarihi Başlangıç tarihi
Katılım
28 Tem 2022
Mesajlar
360
Excel Versiyonu
Excel 365
Excel Sürümü
32 Bit
Excel Dili
Türkçe
Merhaba,

İşyerindeki çalışanlar şirkete giriş ve çıkışlarında kart basıyorlar. Buradaki giriş ve çıkış sürelerine göre, 3 ayrı vardiyadaki çalışan sayısını bulmak istiyorum. Örnek bir tablo şöyledir:

Saat Aralıklarından Vardiyadaki Çalışan Sayılarını Bulma


Buradaki vardiya sistemi;

07:00 - 15:00
15:00 - 23:00
23:00 - 07:00

şeklinde.
Tabi çalışanlar vardiya başlangıç saatinden önce kart bastıkları için, vardiya başlangıcından 10-15 dakika kadar erkene çıkıyor basma süreleri. Aynı şekilde vardiya bitiminde de, 5-10 dakika geç basıyorlar.

İstediğim, belli bir dakika opsiyonu da vererek, aşağıdaki gibi bir tablo oluşturmak.

Saat Aralıklarından Vardiyadaki Çalışan Sayılarını Bulma


Benim için herhangi bir Excel çözümü kabul edilir niteliktedir.

Şimdiden çok teşekkür ederim.
 

Ekli dosyalar

Hocam o detaya girersek, işin içinden çıkamayız. "Geç gelen" kısmını şimdilik pas geçebiliriz.
Herkesin zamanında ve öncesinde girdiğini, zamanında ve sonrasında çıktığını varsayalım.
 
Hocam ilk cevap olarak hemen yazayım. Dosyayı şu an inceleme şansım yok ama ilk fırsatta inceleyip size dönüüş yapacağım.

Emeğinize sağlık.
 
Hocam kodları inceledim, acaba yine diğer konudaki olduğu gibi 3 vardiyayı da ilk sütuna kodla ekleyebilir miyiz?

ikinci olarak, kodları aşağıdaki gibi küçük bir revize ettim (veri aralıklarını) ama sadece 2 satıra veri yazdı.

Eksiklik nerededir?

Kod:
Option Explicit

Sub saatler()
Dim saat As Date
Dim fark As Integer
Dim dz()
Dim dzA As Variant
Dim say()
Dim cal As Variant
Dim i, k As Integer

cal = Sayfa1.Range("A2:c4")
ReDim say(1 To UBound(cal, 1))
dzA = Sayfa1.Range("E2:E4")
ReDim dz(1 To UBound(dzA, 1), 1 To 2)

'vardiya saatleri
For i = 1 To UBound(dzA, 1)
dz(i, 1) = Split(dzA(i, 1), "-")(0)
dz(i, 2) = Split(dzA(i, 1), "-")(1)
Next i

For k = 1 To UBound(cal, 1)

    For i = 1 To UBound(dz, 1)
    
    If CDate(cal(k, 2)) < DateAdd("n", 15, dz(i, 1)) And CDate(cal(k, 3)) < DateAdd("n", 15, dz(i, 2)) Then
        say(k) = 1
        Exit For
    End If
    Next i
Next k

Sayfa1.Range("M2").Resize(UBound(say), 1) = WorksheetFunction.Transpose(say)
End Sub
 
Hocam bir saniye, siz dosyaları tamamen karıştırmışsınız. Eklediğiniz dosya toplantı sayılarını listeliyor. Bu konu ise vardiya sayılarının bulunması. İlk mesajımdaki dosyayı indirirseniz ne demek istediğimi daha net anlayacaksınız.

Teşekkürler
 
Benzer Konular Popüler İçerikler Daha Fazlası
Geri
Üst Alt