İki Listeyi Belirli kriterlere göre karşılaştırma

tigiy

Altın Üye
Katılım
31 Aralık 2013
Mesajlar
138
Excel Vers. ve Dili
2019-Türkçe
Altın Üyelik Bitiş Tarihi
11-09-2025
Merhaba,
bir excel dosyasında iki ayrı çalışma sayfam var bu sayfalarda makro ile karşılaştırma yapıp d sütununa istenilen açıklamaları yapmak istiyorum.

Örnek ve açıklamalar ektedir.

Saygılarımla
 

Ekli dosyalar

Son düzenleme:

tigiy

Altın Üye
Katılım
31 Aralık 2013
Mesajlar
138
Excel Vers. ve Dili
2019-Türkçe
Altın Üyelik Bitiş Tarihi
11-09-2025
Hocam cevap için teşekkürler ancak Diyelim ki fatura no ve tutar aynı ancak tarih farklı ise bunu yok olarak gösteriyor halbuki X olarak göstermesi gerek ayrıca fatura no farklı tarih ve tutar aynı olanlara "Tarih ve Fatura numarası tutuyor Tutar farklı" yazıyor
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Hocam cevap için teşekkürler ancak Diyelim ki fatura no ve tutar aynı ancak tarih farklı ise bunu yok olarak gösteriyor halbuki X olarak göstermesi gerek
Ben çalıştırınca X yazıyor. Siz çalıştırınca hangi satırda Yok yazıyor.

ayrıca fatura no farklı tarih ve tutar aynı olanlara "Tarih ve Fatura numarası tutuyor Tutar farklı" yazıyor
Bunu düzeltmek için kodlardaki iki metnin yerini değiştirin.
 

tigiy

Altın Üye
Katılım
31 Aralık 2013
Mesajlar
138
Excel Vers. ve Dili
2019-Türkçe
Altın Üyelik Bitiş Tarihi
11-09-2025
Ben çalıştırınca X yazıyor. Siz çalıştırınca hangi satırda Yok yazıyor.



Bunu düzeltmek için kodlardaki iki metnin yerini değiştirin.
Metinleri hallettim hocam

Şimdi şöyle yapsak daha sağlıklı olacak tarih fatura no ve tutar tutyorsa "Y" Fatura no ve tutar tutyorsa "X" Yazsın
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Şimdi şöyle yapsak daha sağlıklı olacak tarih fatura no ve tutar tutyorsa "Y" Fatura no ve tutar tutyorsa "X" Yazsın
O zaman kodlar şu şekilde değişti

Kod:
Sub Karsilastir_(SAYFA1 As Worksheet, SAYFA2 As Worksheet)
    Dim Bak1 As Range
    Dim Bak2 As Range
    
    Dim No As Boolean
    Dim Tutar As Boolean
    
    For Each Bak1 In SAYFA1.Range("A2:A" & SAYFA1.Range("A65000").End(3).Row)
        Bak1.Offset(0, 3).Value = "YOK"
        For Each Bak2 In SAYFA2.Range("A2:A" & SAYFA2.Range("A65000").End(3).Row)
            If Bak1.Value = Bak2.Value Then
                
                If Bak1.Offset(0, 1).Value = Bak2.Offset(0, 1).Value Then
                    No = True
                End If
                If Bak1.Offset(0, 2).Value = Bak2.Offset(0, 2).Value Then
                    Tutar = True
                End If
                If No And Tutar Then
                    Bak1.Offset(0, 3).Value = "Y"
                ElseIf No Then
                    Bak1.Offset(0, 3).Value = "Tarih ve Fatura numarası tutuyor Tutar farklı"
                ElseIf Tutar Then
                    Bak1.Offset(0, 3).Value = "Tarih ve Tutar tutuyor Fatura numarası Farklı"
                End If
                If No Or Tutar Then
                    No = False
                    Tutar = False
                    Exit For
                End If
            Else
                If Bak1.Offset(0, 1).Value = Bak2.Offset(0, 1).Value And _
                    Bak1.Offset(0, 2).Value = Bak2.Offset(0, 2).Value Then
                    Bak1.Offset(0, 3).Value = "X"
                    Exit For
                End If
            End If
            
        Next
    Next
End Sub
 

tigiy

Altın Üye
Katılım
31 Aralık 2013
Mesajlar
138
Excel Vers. ve Dili
2019-Türkçe
Altın Üyelik Bitiş Tarihi
11-09-2025
Hocam çok teşekkürler tam istediğim gibi elinize ve aklınıza sağlık yanlız son bir ricam var a, b, c sütünu boş ise D'ye "Boş" Yazma ihtimali var mı?
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Yeni Kodlar

Kod:
Sub Karsilastir_(SAYFA1 As Worksheet, SAYFA2 As Worksheet)
    Dim Bak1 As Range
    Dim Bak2 As Range
    
    Dim No As Boolean
    Dim Tutar As Boolean
    
    For Each Bak1 In SAYFA1.Range("A2:A" & SAYFA1.Range("A65000").End(3).Row)
        Bak1.Offset(0, 3).Value = "YOK"
        For Each Bak2 In SAYFA2.Range("A2:A" & SAYFA2.Range("A65000").End(3).Row)
            If Bak1.Value = Bak2.Value Then
                
                If Bak1.Offset(0, 1).Value = Bak2.Offset(0, 1).Value Then
                    No = True
                End If
                If Bak1.Offset(0, 2).Value = Bak2.Offset(0, 2).Value Then
                    Tutar = True
                End If
                If No And Tutar Then
                    Bak1.Offset(0, 3).Value = "Y"
                ElseIf No Then
                    Bak1.Offset(0, 3).Value = "Tarih ve Fatura numarası tutuyor Tutar farklı"
                ElseIf Tutar Then
                    Bak1.Offset(0, 3).Value = "Tarih ve Tutar tutuyor Fatura numarası Farklı"
                End If
                If No Or Tutar Then
                    No = False
                    Tutar = False
                    Exit For
                End If
            Else
                If Bak1.Offset(0, 1).Value = Bak2.Offset(0, 1).Value And _
                    Bak1.Offset(0, 2).Value = Bak2.Offset(0, 2).Value Then
                    Bak1.Offset(0, 3).Value = "X"
                    Exit For
                ElseIf Bak1.Value = "" And Bak1.Offset(0, 1).Value = "" And _
                    Bak1.Offset(0, 2).Value = "" Then
                    Bak1.Offset(0, 3).Value = "BOŞ"
                    Exit For
                End If
            End If
            
        Next
    Next
End Sub
 

tigiy

Altın Üye
Katılım
31 Aralık 2013
Mesajlar
138
Excel Vers. ve Dili
2019-Türkçe
Altın Üyelik Bitiş Tarihi
11-09-2025
Hocam gerçekten çok teşekkürler süper oldu.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Hangi satırlarda yanlış sonuç veriyor. Birkaç tane sayfa ismi ve satır numarasını söyler misiniz?
 

tigiy

Altın Üye
Katılım
31 Aralık 2013
Mesajlar
138
Excel Vers. ve Dili
2019-Türkçe
Altın Üyelik Bitiş Tarihi
11-09-2025
Hangi satırlarda yanlış sonuç veriyor. Birkaç tane sayfa ismi ve satır numarasını söyler misiniz?
Hocam mesela örnekte karşılaştırmayı çalıştırdığımız zaman sonuçlar yazıldıktan sonra her iki sayfada da "Y" olanları filtrelediğimde 1. sayfada 1412 tane 2. sayfada 1416 tane gözüküyor mesela

Aynı şekilde "Tarih ve Fatura numarası tutuyor Tutar farklı" olanları süzünce 1. sayfada 245 2. sayfada 249 adet gözüküyor.

Satır örneği için 1. sayfada 234. satır 2. sayfada 297. satır birebir aynı yani "Y" olması gerekirken "Tarih ve Fatura numarası tutuyor Tutar farklı" gözküyor
 

Ekli dosyalar

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Aşağıdaki kodları deneyin.

Kod:
Sub Karsilastir_(SAYFA1 As Worksheet, SAYFA2 As Worksheet)
    Dim Bak1 As Range
    Dim Bak2 As Range
    
    Dim No As Boolean
    Dim Tutar As Boolean
    
    For Each Bak1 In SAYFA1.Range("A2:A" & SAYFA1.Range("A65000").End(3).Row)
        Bak1.Offset(0, 3).Value = "YOK"
        For Each Bak2 In SAYFA2.Range("A2:A" & SAYFA2.Range("A65000").End(3).Row)
            If Bak1 = Bak2 Then
                If Bak1.Offset(0, 1) = Bak2.Offset(0, 1) Then
                    No = True
                End If
                If Bak1.Offset(0, 2) = Bak2.Offset(0, 2) Then
                    Tutar = True
                End If
                If No And Tutar Then
                    Bak1.Offset(0, 3).Value = "Y"
                ElseIf No Then
                    Bak1.Offset(0, 3).Value = "Tarih ve Fatura numarası tutuyor Tutar farklı"
                ElseIf Tutar Then
                    Bak1.Offset(0, 3).Value = "Tarih ve Tutar tutuyor Fatura numarası Farklı"
                End If
                If No Or Tutar Then
                    No = False
                    Tutar = False
                    Exit For
                End If
            Else
                If Bak1.Offset(0, 1) = Bak2.Offset(0, 1) And _
                    Bak1.Offset(0, 2) = Bak2.Offset(0, 2) Then
                    Bak1.Offset(0, 3).Value = "X"
                    Exit For
                ElseIf Bak1 = "" And Bak1.Offset(0, 1) = "" And _
                    Bak1.Offset(0, 2) = "" Then
                    Bak1.Offset(0, 3).Value = "BOŞ"
                    Exit For
                End If
            End If
            
        Next
    Next

End Sub
 
Son düzenleme:

tigiy

Altın Üye
Katılım
31 Aralık 2013
Mesajlar
138
Excel Vers. ve Dili
2019-Türkçe
Altın Üyelik Bitiş Tarihi
11-09-2025
Aşağıdaki kodları deneyin.

Kod:
Sub Karsilastir_(SAYFA1 As Worksheet, SAYFA2 As Worksheet)
    Dim Bak1 As Range
    Dim Bak2 As Range
    
    Dim No As Boolean
    Dim Tutar As Boolean
    
    For Each Bak1 In SAYFA1.Range("A2:A" & SAYFA1.Range("A65000").End(3).Row)
        Bak1.Offset(0, 3).Value = "YOK"
        For Each Bak2 In SAYFA2.Range("A2:A" & SAYFA2.Range("A65000").End(3).Row)
            If Bak1 = Bak2 Then
                If Bak1.Offset(0, 1) = Bak2.Offset(0, 1) Then
                    No = True
                End If
                If Bak1.Offset(0, 2) = Bak2.Offset(0, 2) Then
                    Tutar = True
                End If
                If No And Tutar Then
                    Bak1.Offset(0, 3).Value = "Y"
                ElseIf No Then
                    Bak1.Offset(0, 3).Value = "Tarih ve Fatura numarası tutuyor Tutar farklı"
                ElseIf Tutar Then
                    Bak1.Offset(0, 3).Value = "Tarih ve Tutar tutuyor Fatura numarası Farklı"
                End If
                If No Or Tutar Then
                    No = False
                    Tutar = False
                    Exit For
                End If
            Else
                If Bak1.Offset(0, 1) = Bak2.Offset(0, 1) And _
                    Bak1.Offset(0, 2) = Bak2.Offset(0, 2) Then
                    Bak1.Offset(0, 3).Value = "X"
                    Exit For
                ElseIf Bak1 = "" And Bak1.Offset(0, 1) = "" And _
                    Bak1.Offset(0, 2) = "" Then
                    Bak1.Offset(0, 3).Value = "BOŞ"
                    Exit For
                End If
            End If
            
        Next
    Next
    MsgBox "Karşılaştırma tamamlandı."
End Sub
Hocam aynı şekilde devam ediyor sorun örneğin sayfa 1 de satır 260 ile sayfa 2 de satır 316 birebir aynı yani "Y" olmalı ancak "Tarih ve Fatura numarası tutuyor Tutar farklı" Şeklinde sonuç veriyor
 

tigiy

Altın Üye
Katılım
31 Aralık 2013
Mesajlar
138
Excel Vers. ve Dili
2019-Türkçe
Altın Üyelik Bitiş Tarihi
11-09-2025
Hocam sorun şu galiba diyelim ki 1. sayfada

31.01.2014 120446 195,16 şeklinde veri olsun

2. sayfada

31.01.2014 0446-2 195,16
31.01.2014 0446-1 -195,16
31.01.2014 120446 195,16

şeklinde 3 satır olsun

bu şekilde olan sayfalarda karşılaştırma yapınca

1. sayfada sonuç bölümünde "Tarih ve Tutar tutuyor Fatura numarası Farklı"

2. sayfada sonuç bölümünde ise

1. satır "Tarih ve Tutar tutuyor Fatura numarası Farklı"
2. satır "YOK"
3. "Y"

Yani aynı tarih ve tutar aynı ise verinin çok olduğu sayfada iki kere işlemi yapmıyor ilk bulduğunu yazıyor

verinin az olduğu 1. sayfada son bulduğuna göre işlem yapıyor
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Faturar Tutarı kolonunun hücre formatı sayfaların birinde isteğe uyarlanmış diğerinde Finansal ayarlandığından yanlış sonuç veriyor. İki sayfadaki ilgili kolonların hücre formatlarını aynı yaparsanız sorun ortadan kalkıyor.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Yani aynı tarih ve tutar aynı ise verinin çok olduğu sayfada iki kere işlemi yapmıyor ilk bulduğunu yazıyor

verinin az olduğu 1. sayfada son bulduğuna göre işlem yapıyor
Evet kodlar bu şekilde çalışıyor. Çünkü sabit bir veri yok.

Örneğin A ürününe bakıp A ürünleri arasında karşılaştırma yapmıyoruz. Tarihi alıp Tarih, No yada tutar tutuyorsa eşleşme var diyoruz. Dolayısı ile bu atalara sebep olabilir.

Ama asıl sorun hücre formatından kaynaklanıyor.
 

tigiy

Altın Üye
Katılım
31 Aralık 2013
Mesajlar
138
Excel Vers. ve Dili
2019-Türkçe
Altın Üyelik Bitiş Tarihi
11-09-2025
Evet kodlar bu şekilde çalışıyor. Çünkü sabit bir veri yok.

Örneğin A ürününe bakıp A ürünleri arasında karşılaştırma yapmıyoruz. Tarihi alıp Tarih, No yada tutar tutuyorsa eşleşme var diyoruz. Dolayısı ile bu atalara sebep olabilir.

Ama asıl sorun hücre formatından kaynaklanıyor.
Hocam formatları güncelledim ama hala hata devam ediyor hatta daha çok arttı eke örneği koydum inceler misiniz? Ya da sizin hatasız çalıştırdığınız örneği bana gönderebilir misiniz?
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Tutar kolonunun seçip Hücre formatlarını iki sayfada da genel olarak yapar mısnız? Ben de şimdi tekrar deneyeceğim.
 
Üst