• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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

Katılım
11 Ocak 2012
Mesajlar
35
Excel Vers. ve Dili
excel 2007
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:
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
 
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
 
VBA için ekstra bir yüklemeye gerek yok. Seçeneklerden aşağıdaki tik işaretlerseniz açılır.

253356
 
Bu mesajda gönderdiğim örneği inceleyin. Sanırım bu ya da buna benzer şekilde olmasını istiyorsunuz.
 

Ekli dosyalar

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

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

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

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
 
Geri
Üst