• DİKKAT

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

Sicil ve Tarihe göre eşleştirip değer getirme

Katılım
16 Ocak 2012
Mesajlar
42
Excel Vers. ve Dili
Office 2010
Merhaba Değerli arkadaşlar. Yaklaşık 2 aydır forumumuza üyeyim ve sayenizde çok şey öğrendim ancak şu anda işin içinden çıkamadığım bir sorunum var. Ekteki dosyada A sütunu sicil numarası B sütunu tarih. Buradaki değerlerden sicili f sütunundaki değer ile eşleştirecek ve B sütunundaki tarihin G H sütunları arasında olup olmadığını kontrol edecek bir kod lazım. Eğer o aralıktaysa I sütunundaki değeri C'ye yazdıracak. 100.000 kayıt için bunu çalıştıracağımdan yardımlarınız çok önemli. Şimdiden teşekkürler.
 

Ekli dosyalar

c1 hücresine ;
Kod:
EĞER(VE(A1=F1;B1>G1;B1<H1);I1;"")
 
c1 hücresine ;
Kod:
EĞER(VE(A1=F1;B1>G1;B1<H1);I1;"")

Öncelikle öneriniz için teşekkür ederim ancak 100.000 satır veriyle çalıştığımız için bu kod bana çok yardımcı olamayacak. Tam olarak işi anlatırsak bir yerde kişinin grade dereceleri olan excel dosya var. Hani devlette olurdu ya 4 ün 2 si 2 nin 1 i diye o listeden bahsediyorum. Bu listede başlangıç ve bitiş tarihleri var. Diğer bir listede de o çalışanın belirli tarihler arasındaki ünvanı yazıyor. Yani benim şunu yaptırmam lazım; sicil aynı oldugu durumda grade lerin yazılı oldugu tarih aralığında unvanı ne ona bakmak lazım.
 
Formul işinizi hızından dolayımı gÖrmüyor yoksa satır sarıra eşme değilde tüm sütundan eşlememi söz konusu ?

Yani a1:deki sicil f de sona kadar aranıp şarta uygun olanlar mı lazım ; yoksa formul deki gibi mi

formul doğru fakat hızmı problem grade falan anlamıyorum malesef :)
 
Formul işinizi hızından dolayımı gÖrmüyor yoksa satır sarıra eşme değilde tüm sütundan eşlememi söz konusu ?

Yani a1:deki sicil f de sona kadar aranıp şarta uygun olanlar mı lazım ; yoksa formul deki gibi mi

formul doğru fakat hızmı problem grade falan anlamıyorum malesef :)

Hız problem olmaz o konuda emin olabilirsiniz. :) Problem şu sizin yazdığınız formülde tek bir satır için kontrol yapılıyor. ama bana o sicilin gectigi 10 tane satır varsa a hücresindeki tarihi bu 10 unda aratıp eşleşeni getirmesi. 100.000 kayıt oldugu için tek tek eğer(ve yazmak mümkün degil. Ayrıca sizin formülde bir alttaki kayıt belki diğer hücrenin 5. siyle eşleşiyordur ama siz sadece kendi satırıyla karsılastırmıssınız.
 
1 kayıt birden fazla eşleme ile eşit çıkarsa ne olucak ?
 
1 kayıt birden fazla eşleme ile eşit çıkarsa ne olucak ?

Eşleşme şansı yok, çünkü askeriye gibi düsünürsek bir insan 2004-2007 arası teğmen diyelim, 2007-2009 arası üsteğmen, 2009-2012 arası yüzbaşı oluyorsa burada verilen bir tarihte hem yüzbaşı hem teğmen olma şansı yok. Bizim ünvanlar da aynı şekilde yürüdüğü için verilen tarih birden fazlasıyla eşleşemez ;)
 
makrolu çözüm olabilir
 
Son düzenleme:
makrolu çözüm olabilir

Öncelikle ilginize müteşekkirim. Ümit ediyorum bu azimle bu işi çözeceğiz ancak henüz çözüm aşamasında değiliz çünkü son yazdığınız formül dizi olarak arama yaptırmıyor. Bize lazım olan şu, diyelim ki 100 sicil numaralı adam için yanına ünvan yazdırmam gereken 8 tane satır var, ünvan kısmında ise 5 tane satır var bu 100 sicilli kişi için, burada bu 8 satırın her birisini 0 5 satırın içinde değerlendirecek ve karşılarına karşılığını yazacak.. Bir nevi düşeyara eşleştirmeleri gibi ama daha kapsamlı birşeyler bulmamız lazım...
 
Merhaba,

Kayıt sayısı fazla ise bence makro kullanın. Aşağıdaki makroyu bir modüle koplayayıp deneyiniz.

Kod:
Sub Kontrol()
 
    Dim i       As Long
    Dim SonA    As Long
    Dim SonF    As Long
    Dim c       As Range
    Dim Adr     As String
    
    Application.ScreenUpdating = False
    
    SonF = Cells(Rows.Count, "F").End(3).Row
    
    For i = 1 To Cells(Rows.Count, "A").End(3).Row
        With Range("F1:F" & SonF)
            Set c = .Find(Cells(i, "A"), LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                Adr = c.Address
                Do
                    If Cells(i, "B") >= Cells(c.Row, "G") And Cells(i, "B") <= Cells(c.Row, "H") Then Cells(i, "C") = Cells(c.Row, "I")
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> Adr
            End If
        End With
    Next i
    
    Application.ScreenUpdating = True
    
    MsgBox "Karşılaştırma Bitmiştir...."
        
End Sub
 
Merhaba,

Kayıt sayısı fazla ise bence makro kullanın. Aşağıdaki makroyu bir modüle koplayayıp deneyiniz.

Kod:
Sub Kontrol()
 
    Dim i       As Long
    Dim SonA    As Long
    Dim SonF    As Long
    Dim c       As Range
    Dim Adr     As String
    
    Application.ScreenUpdating = False
    
    SonF = Cells(Rows.Count, "F").End(3).Row
    
    For i = 1 To Cells(Rows.Count, "A").End(3).Row
        With Range("F1:F" & SonF)
            Set c = .Find(Cells(i, "A"), LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                Adr = c.Address
                Do
                    If Cells(i, "B") >= Cells(c.Row, "G") And Cells(i, "B") <= Cells(c.Row, "H") Then Cells(i, "C") = Cells(c.Row, "I")
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> Adr
            End If
        End With
    Next i
    
    Application.ScreenUpdating = True
    
    MsgBox "Karşılaştırma Bitmiştir...."
        
End Sub


Çok teşekkürler Necdet Bey, ellerinize sağlık yazdığınız makro sorunumuzu çözdü.
 
Kod:
Sub bul()
Columns("c:c").Clear
ason = Cells(Rows.Count, "a").End(xlUp).Row
fson = Cells(Rows.Count, "f").End(xlUp).Row
Set dizi = Range("f1:f" & fson)
10:
If x = 0 Then sayac = 1
x = Range("a" & sayac).Value

For Each a In dizi
If x = a Then Range("c" & a.Row) = Range("ı" & a.Row)
Next
sayac = sayac + 1
If sayac <> ason Then

GoTo 10
End If
End Sub


Necdet beyin makrosunu görmemiştim ; benim makroda 6 7 ve 8 ci satırda sonuç "3" olarak çıkıyor... Ama dursun bari burda :)
 
Son düzenleme:
Geri
Üst