Net çalışma süresi hesaplama

Katılım
27 Haziran 2013
Mesajlar
5
Excel Vers. ve Dili
2007 - İngilizce
Arkadaşlar, giriş çıkış saatlerinde (ekteki tabloda) kişi ID bazında;

- ilk giriş ile son giriş arasındaki süreyi - ne kadar iş yerinde kaldığını-,
- Kaç defa giriş-çıkış yaptığını (ilk girişten sonra yapılan girişlerin sayısı olabilir),
- Ne kadar süre dışarıda kaldığını (çıkışla ondan sonra gelen giriş arasındaki fark)

nasıl bulabilir. Yardımlarınızı rica ediyorum.
 

Ekli dosyalar

Katılım
31 Ocak 2012
Mesajlar
2,430
Excel Vers. ve Dili
Excel 2010 , Türkçe
Altın Üyelik Bitiş Tarihi
24.01.2019
selam,
eki inceleyiniz..
kolay gelsin..
 
Son düzenleme:
Katılım
27 Haziran 2013
Mesajlar
5
Excel Vers. ve Dili
2007 - İngilizce
Teşekkür ederim, istediklerimden 2 tanesine ulaşabiliyorum. Örnek olarak; 7 ID numaralı kişi, 09.37.54 saniye şirkette kalmış ama 5 defa gün içinde dışarı çıktığı için 01.01.36 saniye dışarıda geçirmiş; gün içerisinde dışarıda geçirilen süreyi naslı hesaplarım?

(2.giriş-1.çıkış) + (3.giriş-2.çıkış) + (4.giriş-3.çıkış) + ....
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,489
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,

Aşağıdaki kodları dener misiniz?

Kod:
Sub Giris_Cikis_Verileri_Hesapla()
    
    Dim i               As Long, _
        j               As Integer, _
        Son             As Long, _
        UID             As Long, _
        Giris           As Date, _
        Cikis           As Date, _
        CalismaSuresi   As Date, _
        AraziSuresi     As Date, _
        Adet            As Integer
        
    Application.ScreenUpdating = False
    
    Son = Cells(Rows.Count, "F").End(3).Row + 1
    Range("F2:I" & Son).ClearContents
    Son = Cells(Rows.Count, "A").End(3).Row
    
    Range("A2:C" & Son).Sort Key1:=Range("A1"), Key2:=Range("B1")   ', Key3:=Range("C1"), Order3:=xlDescending
    
    UID = Range("A2")
    Giris = vbEmpty
    Cikis = vbEmpty
    j = 1
    
    For i = 2 To Son + 1
        If Not UID = Cells(i, "A") Then
            j = j + 1
            Cells(j, "F") = UID
            Cells(j, "G") = CDbl(CalismaSuresi)
            Cells(j, "H") = Adet - 1
            Cells(j, "I") = AraziSuresi
            Giris = Empty
            Cikis = Empty
            CalismaSuresi = Empty
            AraziSuresi = Empty
            Adet = 0
            UID = Cells(i, "A")
        End If
        If Cells(i, "C") = "GİRİŞ" Then
            Giris = Cells(i, "B")
            If Not Cikis = 0 Then AraziSuresi = AraziSuresi + (Giris - Cikis)
        Else
            Cikis = Cells(i, "B")
            CalismaSuresi = CalismaSuresi + (Cikis - Giris)
            Adet = Adet + 1
        End If
    Next i
    
    Application.ScreenUpdating = True
    MsgBox "Hesaplama Bitmiştir....", vbInformation, "excel.web.tr"
    
End Sub
 

Ekli dosyalar

1Al2Ver

Altın Üye
Katılım
5 Kasım 2007
Mesajlar
4,717
Excel Vers. ve Dili
64 Bit TR - Microsoft Office 365 - Win11 Home
Altın Üyelik Bitiş Tarihi
04-01-2026
Sayın Necdet YEŞERTENER, merhaba,

A sütununda, User ID no.yerine İsim yazılsa, kod'da nasıl bir düzenleme gerekir ?

Teşekkür ederim.
 
Katılım
27 Haziran 2013
Mesajlar
5
Excel Vers. ve Dili
2007 - İngilizce
Teşekkür ederim, elinize sağlık. Çok iyi olmuş. Peki onların yanına sabah ilk giriş saatini ve akşam son çıkış saatini de ekleme imkanımız var mı? Olmasa bile teşekkür ederim..
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,489
Excel Vers. ve Dili
Ofis 365 Türkçe
Teşekkür ederim, elinize sağlık. Çok iyi olmuş. Peki onların yanına sabah ilk giriş saatini ve akşam son çıkış saatini de ekleme imkanımız var mı? Olmasa bile teşekkür ederim..
Buyrunuz.

Kod:
Sub Giris_Cikis_Verileri_Hesapla()
    
    Dim i               As Long, _
        j               As Integer, _
        Son             As Long, _
        UID             As Long, _
       [COLOR=red] iGiris          As Date[/COLOR], _
        Giris           As Date, _
        Cikis           As Date, _
        CalismaSuresi   As Date, _
        AraziSuresi     As Date, _
        Adet            As Integer
        
    Application.ScreenUpdating = False
    
    Son = Cells(Rows.Count, "F").End(3).Row + 1
    Range("F2:I" & Son).ClearContents
    Son = Cells(Rows.Count, "A").End(3).Row
    
    Range("A2:C" & Son).Sort Key1:=Range("A1"), Key2:=Range("B1")   ', Key3:=Range("C1"), Order3:=xlDescending
    
    UID = Range("A2")
    Giris = Empty
    Cikis = Empty
   [COLOR=red] iGiris = Empty
[/COLOR]    j = 1
    
    For i = 2 To Son + 1
        If Not UID = Cells(i, "A") Then
            j = j + 1
            Cells(j, "F") = UID
            Cells(j, "G") = CDbl(CalismaSuresi)
            Cells(j, "H") = Adet - 1
            Cells(j, "I") = AraziSuresi
            [COLOR=red]Cells(j, "J") = iGiris
[/COLOR]            Cells(j, "K") = Cikis
            iGiris = Empty
            Giris = Empty
            Cikis = Empty
            CalismaSuresi = Empty
            AraziSuresi = Empty
            Adet = 0
            UID = Cells(i, "A")
        End If
        If Cells(i, "C") = "GİRİŞ" Then
            Giris = Cells(i, "B")
            [COLOR=red]If iGiris = 0 Then iGiris = Cells(i, "B")
[/COLOR]         If Not Cikis = 0 Then AraziSuresi = AraziSuresi + (Giris - Cikis)
        Else
            Cikis = Cells(i, "B")
            CalismaSuresi = CalismaSuresi + (Cikis - Giris)
            Adet = Adet + 1
        End If
    Next i
    
    Application.ScreenUpdating = True
    MsgBox "Hesaplama Bitmiştir....", vbInformation, "excel.web.tr"
    
End Sub
 

Ekli dosyalar

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,489
Excel Vers. ve Dili
Ofis 365 Türkçe
Güle güle kullanınız, çalışanları da fazla sık boğaz etmeyiniz :)
 

1Al2Ver

Altın Üye
Katılım
5 Kasım 2007
Mesajlar
4,717
Excel Vers. ve Dili
64 Bit TR - Microsoft Office 365 - Win11 Home
Altın Üyelik Bitiş Tarihi
04-01-2026
Merhaba,

UID değişkenini String tanımlamak yeterli.
Sayın Necdet YEŞERTENER merhaba,

Çözüm için teşekkür ederim,

İlk soru sahibi bir yorum yapmamış ama, bir şey dikkatimi çekti,

A sütununda USER ID nolar, makro çalışınca alt alta sıralanıyor, dolayısı ile B sütunundaki saatlerin kayıt sıralaması da değişiyor,

Acaba, USER ID ler ve Time orj.halinde kalabilir mi ?

Teşekkür ederim.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,489
Excel Vers. ve Dili
Ofis 365 Türkçe
Sayın Necdet YEŞERTENER merhaba,

Çözüm için teşekkür ederim,

İlk soru sahibi bir yorum yapmamış ama, bir şey dikkatimi çekti,

A sütununda USER ID nolar, makro çalışınca alt alta sıralanıyor, dolayısı ile B sütunundaki saatlerin kayıt sıralaması da değişiyor,

Acaba, USER ID ler ve Time orj.halinde kalabilir mi ?

Teşekkür ederim.
Merhaba,

Ben böyle bir dosya hiç görmedim, kendi çalıştğım kurumda bile. Ama sanırım bu liste olsa olsa saat sıralı olur diye düşündüm.

Ama o sıra benim işimi zorlaştırıyordu, bende farklı bir yerde kişiye göre sıralatıp orada kullanmak yerine doğrudan veriyi sıraladım.

Eğer benim düşündüğüm gibi ise listeleme bittikten sonra tekrar saate göre sıralatmak sanırım işinizi görür.

Yok öyle değilse veriyi başka bir yerde sıralatıp orada işlem yaptıktan sonra geçici alanı silmek çözüm olacaktır.
 

1Al2Ver

Altın Üye
Katılım
5 Kasım 2007
Mesajlar
4,717
Excel Vers. ve Dili
64 Bit TR - Microsoft Office 365 - Win11 Home
Altın Üyelik Bitiş Tarihi
04-01-2026
Necdet bey merhaba,

Açıklamalarınız ve ilginiz için teşekkür ederim,

Konu bana ait değil malum, ancak farklı bir projede kullanılır düşüncesi ile yola çıktım, dolayısı ile orj.mesaj sahibinin bu konudaki yorumunu bilmiyorum, çözümünüz işe yaramış olacak ki farklı bir isteği olmamış,

Benim acizane tespitim, kendi yorumuma göre oldu,

Düşündüğünüz üzere ;

Listeleme sonrası, A ve B sütunlarını saate göre tekrar sıralatabilir miyiz ?

Teşekkür ederim.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,489
Excel Vers. ve Dili
Ofis 365 Türkçe
Bence sadece saate göre tekrar sıralalatmak yeterli olacaktır.
 
Katılım
27 Haziran 2013
Mesajlar
5
Excel Vers. ve Dili
2007 - İngilizce
Benim çözümümde sıralama sorun olmuyor, hatta daha iyi oldu diyebilirim; aktif olarak kullanıyoruz ve şimdilik olumsuz bir durumla karşılamadık.
 
Üst