Girilen tarih aralığında kaçıncı kazası olduğunu bulma

perseus85

Altın Üye
Katılım
11 Ocak 2012
Mesajlar
32
Excel Vers. ve Dili
excel 2007
Altın Üyelik Bitiş Tarihi
23-08-2025
merhaba. elimde işçi kazalı veritabanı bulunuyor. veritabanında işçi sicili ve kaza tarihleri bulunuyor. tablodan ufak bir örnek koydum aşağıya. 5624333 sicilinin 10.07.2024 ve 11.11.2024 tarihlerinde olmak üzere 2 tane kazası var gördüğünüz gibi. Mesela d1 ve d2 hücrelerinde başlangıç ve bitişini gireceğim tarihler arasında kaçıncı kazası olduğunu sicil kolonunun sol tarafına bi kolon açıp her sicilin yanına aşağıdaki örneğe eklediğim gibi yazmasını istiyorum.

tarih başlangıç 25.06.2024 tarih bitiş 20.11.2024

0 5100500 10.06.2024
1 5624333 10.07.2024
1 5125100 21.07.2024
1 5888700 31.07.2024
1 5099400 15.08.2024
1 5441150 20.08.2024
1 5078889 10.09.2024
2 5624333 11.11.2024
0 5900554 05.12.2024


Yardımlarınız için teşekkürler.
 
Son düzenleme:

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,441
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Once kaza numaralarını b tarih aralığını c sutununa taşıyın a boş kalsın


Aşağıdaki VBA kodunu kullanarak belirlediğiniz tarih aralığında her işçinin kaçıncı kazasını yaşadığını hesaplayabilirsiniz.
VBA Kodları:
  1. Excel VBA'yı açın:
    • Alt + F11 tuşlarına basarak VBA editörünü açın.
    • Insert > Module seçeneği ile yeni bir modül ekleyin.
  2. Aşağıdaki kodu modüle yapıştırın:
Kod:
Sub KazalariSirala()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long, j As Long
    Dim startDate As Date, endDate As Date
    Dim sicil As String
    Dim kazalar As Object

    ' Çalışma sayfasını belirleyin
    Set ws = ThisWorkbook.Sheets("Sheet1") ' Sayfa adını gerektiği gibi değiştirin
    
    ' Tarih aralığını belirleyin
    startDate = ws.Range("D1").Value
    endDate = ws.Range("D2").Value

    ' Son satırı bul
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

    ' Sözlük nesnesi oluştur
    Set kazalar = CreateObject("Scripting.Dictionary")

    ' Kazaları numaralandır
    For i = 2 To lastRow
        sicil = ws.Cells(i, 2).Value
        If Not kazalar.exists(sicil) Then
            kazalar.Add sicil, 0
        End If
        
        If ws.Cells(i, 3).Value >= startDate And ws.Cells(i, 3).Value <= endDate Then
            kazalar(sicil) = kazalar(sicil) + 1
        End If

        ws.Cells(i, 1).Value = kazalar(sicil)
    Next i
End Sub
Kodun Açıklaması:
  • Tarih aralığı: D1 hücresine başlangıç tarihi ve D2 hücresine bitiş tarihini girmeniz gerekecek.
  • Sicil ve kaza tarihi sütunları: Bu kod, B sütununda sicil numaralarını ve C sütununda kaza tarihlerini arar. Gerekirse bu sütunları kodda değiştirin.
  • Sonuç: Kod, A sütununda her bir sicil için kaza sayısını gösterecektir.
Kullanım:
  1. Başlatmak için: VBA editöründen KazalariSirala makrosunu çalıştırın.
  2. Sonuçları kontrol edin: Kod çalıştıktan sonra, A sütununda her sicil için kaçıncı kaza olduğu görülecektir.
Bu yöntemle istediğiniz sonuca ulaşabilirsiniz
 

perseus85

Altın Üye
Katılım
11 Ocak 2012
Mesajlar
32
Excel Vers. ve Dili
excel 2007
Altın Üyelik Bitiş Tarihi
23-08-2025
10.07.2024 11.11.2024 tarihlerinde
ler arasında kaçıncı kazası olduğunu sicil kolonunun sol tarafın
açıncı kazası olduğunu sicil kolonunun sol tarafına bi kolon açıp her sicilin yanına aşağıdaki örneğe eklediği
Once kaza numaralarını b tarih aralığını c sutununa taşıyın a boş kalsın


Aşağıdaki VBA kodunu kullanarak belirlediğiniz tarih aralığında her işçinin kaçıncı kazasını yaşadığını hesaplayabilirsiniz.
VBA Kodları:
  1. Excel VBA'yı açın:
    • Alt + F11 tuşlarına basarak VBA editörünü açın.
    • Insert > Module seçeneği ile yeni bir modül ekleyin.
  2. Aşağıdaki kodu modüle yapıştırın:
Kod:
Sub KazalariSirala()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long, j As Long
    Dim startDate As Date, endDate As Date
    Dim sicil As String
    Dim kazalar As Object

    ' Çalışma sayfasını belirleyin
    Set ws = ThisWorkbook.Sheets("Sheet1") ' Sayfa adını gerektiği gibi değiştirin
  
    ' Tarih aralığını belirleyin
    startDate = ws.Range("D1").Value
    endDate = ws.Range("D2").Value

    ' Son satırı bul
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

    ' Sözlük nesnesi oluştur
    Set kazalar = CreateObject("Scripting.Dictionary")

    ' Kazaları numaralandır
    For i = 2 To lastRow
        sicil = ws.Cells(i, 2).Value
        If Not kazalar.exists(sicil) Then
            kazalar.Add sicil, 0
        End If
      
        If ws.Cells(i, 3).Value >= startDate And ws.Cells(i, 3).Value <= endDate Then
            kazalar(sicil) = kazalar(sicil) + 1
        End If

        ws.Cells(i, 1).Value = kazalar(sicil)
    Next i
End Sub
Kodun Açıklaması:
  • Tarih aralığı: D1 hücresine başlangıç tarihi ve D2 hücresine bitiş tarihini girmeniz gerekecek.
  • Sicil ve kaza tarihi sütunları: Bu kod, B sütununda sicil numaralarını ve C sütununda kaza tarihlerini arar. Gerekirse bu sütunları kodda değiştirin.
  • Sonuç: Kod, A sütununda her bir sicil için kaza sayısını gösterecektir.
Kullanım:
  1. Başlatmak için: VBA editöründen KazalariSirala makrosunu çalıştırın.
  2. Sonuçları kontrol edin: Kod çalıştıktan sonra, A sütununda her sicil için kaçıncı kaza olduğu görülecektir.
Bu yöntemle istediğiniz sonuca ulaşabilirsiniz
vba ile değil de hücreye formul girerek yapabilir miyiz acaba? işyeri pc sinde office 2016 yüklü vba da yok
 

RBozkurt

𐱅𐰇𐰼𐰚
Altın Üye
Katılım
10 Ocak 2018
Mesajlar
670
Excel Vers. ve Dili
Microsoft Office 2024
Google Sheets
Altın Üyelik Bitiş Tarihi
19-12-2026
VBA için ekstra bir yüklemeye gerek yok. Seçeneklerden aşağıdaki tik işaretlerseniz açılır.

253356
 

perseus85

Altın Üye
Katılım
11 Ocak 2012
Mesajlar
32
Excel Vers. ve Dili
excel 2007
Altın Üyelik Bitiş Tarihi
23-08-2025
Son düzenleme:

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
501
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
açtım geliştirici sekmesini ama kodu nereye yapıştırıcam hiç bişi bilmiyorum onun hakkında
Dediklerinizden anladığım kadarı ile ekteki örneği hazırladım. Bunun gibi birşey mi istediğiniz?
 

Ekli dosyalar

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
501
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Bu mesajda gönderdiğim örneği inceleyin. Sanırım bu ya da buna benzer şekilde olmasını istiyorsunuz.
 

Ekli dosyalar

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
501
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
merhaba. elimde işçi kazalı veritabanı bulunuyor. veritabanında işçi sicili ve kaza tarihleri bulunuyor. tablodan ufak bir örnek koydum aşağıya. 5624333 sicilinin 10.07.2024 ve 11.11.2024 tarihlerinde olmak üzere 2 tane kazası var gördüğünüz gibi. Mesela d1 ve d2 hücrelerinde başlangıç ve bitişini gireceğim tarihler arasında kaçıncı kazası olduğunu sicil kolonunun sol tarafına bi kolon açıp her sicilin yanına aşağıdaki örneğe eklediğim gibi yazmasını istiyorum.

tarih başlangıç 25.06.2024 tarih bitiş 20.11.2024

0 5100500 10.06.2024
1 5624333 10.07.2024
1 5125100 21.07.2024
1 5888700 31.07.2024
1 5099400 15.08.2024
1 5441150 20.08.2024
1 5078889 10.09.2024
2 5624333 11.11.2024
0 5900554 05.12.2024


Yardımlarınız için teşekkürler.


Excel sayfasında yardımcı sütun kullanırsanız aşağıdaki gibi bir formül , doğru anladıysam istediğiniz sonucu veriyor.

=EĞER(VE(B2=DÜŞEYARA(B2;F$2:F$9;1;0);C2>=G$2;C2<=H$2);ÇOKETOPLA(A$2:A2;B$2:B2;B2;C$2:C2;">="&G$2;C$2:C2;"<="&H$2)&". Kaza";"")

Ekteki dosyayı inceleyiniz,
 

Ekli dosyalar

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
501
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Aşağıdaki formül daha sade ve pratik şekilde istediğiniz sonucu veriyor sanırım. Sadece 1 yardımcı sütun kullanarak. Yardımcı sütun kullanılmak istenmezse formül içine eğersay fonksiyonu ile ekleme yapılabilir diye tahmin ediyorum.

=EĞER(VE(B2=B2;C2>=F$2;C2<=G$2);ÇOKETOPLA(A$2:A2;B$2:B2;B2;C$2:C2;">="&F$2;C$2:C2;"<="&G$2)&". Kaza";"")
 

Ekli dosyalar

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
501
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
merhaba. elimde işçi kazalı veritabanı bulunuyor. veritabanında işçi sicili ve kaza tarihleri bulunuyor. tablodan ufak bir örnek koydum aşağıya. 5624333 sicilinin 10.07.2024 ve 11.11.2024 tarihlerinde olmak üzere 2 tane kazası var gördüğünüz gibi. Mesela d1 ve d2 hücrelerinde başlangıç ve bitişini gireceğim tarihler arasında kaçıncı kazası olduğunu sicil kolonunun sol tarafına bi kolon açıp her sicilin yanına aşağıdaki örneğe eklediğim gibi yazmasını istiyorum.

tarih başlangıç 25.06.2024 tarih bitiş 20.11.2024

0 5100500 10.06.2024
1 5624333 10.07.2024
1 5125100 21.07.2024
1 5888700 31.07.2024
1 5099400 15.08.2024
1 5441150 20.08.2024
1 5078889 10.09.2024
2 5624333 11.11.2024
0 5900554 05.12.2024


Yardımlarınız için teşekkürler.

Aşağıdaki formül aradığınız sonuçları veriyor sanırım. Yardımcı sütuna gerek kalmadan Ve ile Çokeğersay fonksiyonu ile sonuç veriyor.

=EĞER(VE(B2=B2;C2>=E$2;C2<=F$2);ÇOKEĞERSAY(B$2:B2;B2;C$2:C2;">="&E$2;C$2:C2;"<="&F$2)&". Kaza";"")
 

Ekli dosyalar

perseus85

Altın Üye
Katılım
11 Ocak 2012
Mesajlar
32
Excel Vers. ve Dili
excel 2007
Altın Üyelik Bitiş Tarihi
23-08-2025
Aşağıdaki formül aradığınız sonuçları veriyor sanırım. Yardımcı sütuna gerek kalmadan Ve ile Çokeğersay fonksiyonu ile sonuç veriyor.

=EĞER(VE(B2=B2;C2>=E$2;C2<=F$2);ÇOKEĞERSAY(B$2:B2;B2;C$2:c2;">="&E$2;C$2:C2;"<="&F$2)&". Kaza";"")
Çok teşekkürler işime yaradı. Halihazırda c$2:c2 methodunu kullabıyordum ama tarih kolonunda da kullanmak aklıma gelmemişti. Halrn daha nasıl çalıştığını anlamadım ama işe yarıyor. Eline sağlık teşekkürler
 
Üst