Farklı Sayfadaki Aynı Satırları Bulma

cimcoz

Altın Üye
Katılım
6 Ekim 2004
Mesajlar
324
Excel Vers. ve Dili
MS Office Plus 2016 & Mac OSX
Altın Üyelik Bitiş Tarihi
13-04-2027
Merhaba,

Ekteki dosyama göre;

DAY1 sayfasındaki A-F aralığındaki değerlerin, DAY2 sayfasındaki A-F aralığındaki tüm satırlardaki, aynı değerlere eşit olup olmadığını kontrol etmek istiyorum.

Eğer DAY2 sayfasındaki A-F arasındaki satırdaki tüm değerler, DAY2 sayfasındaki A-F arasındaki tüm değerlerle birebir aynı ise, DAY2 sayfasındaki G sütununa VAR yazdırmak istiyorum.

Her iki listeyi sort edip yapabildim ama bazen bazı kayıtlar olmayabiliyor ve hatalı kontrol oluyor.

Bu işlemi bir fonksiyon ya da makro ile nasıl yapabilirim?

Zira listem çok büyük ve farklı farklı sınıflar bulunuyor.

Bu konu hakkında yardımlarınızı rica eder, iyi haftalar dilerim.


Saygılarımla,
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,247
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Alternatif;

Hız olarak avantaj sağlayacaktır.

C++:
Option Explicit

Sub Varmi_Yokmu()
    Dim S1 As Worksheet, S2 As Worksheet, Dizi As Object, Aranan As String
    Dim Veri As Variant, Son As Long, X As Long, Say As Long, Zaman As Double
    
    Zaman = Timer
    
    Set S1 = Sheets("DAY1")
    Set S2 = Sheets("DAY2")
    Set Dizi = CreateObject("Scripting.Dictionary")
    
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
    Veri = S1.Range("A2:F" & Son).Value
    
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Aranan = Veri(X, 1) & "|" & Veri(X, 2) & "|" & Veri(X, 3) & "|" & Veri(X, 4) & "|" & Veri(X, 5) & "|" & Veri(X, 6)
        Dizi.Add Aranan, Nothing
    Next
    
    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
    Veri = S2.Range("A2:F" & Son).Value
    
    ReDim Liste(1 To UBound(Veri, 1), 1 To 1)
    
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Aranan = Veri(X, 1) & "|" & Veri(X, 2) & "|" & Veri(X, 3) & "|" & Veri(X, 4) & "|" & Veri(X, 5) & "|" & Veri(X, 6)
        Say = Say + 1
        If Dizi.Exists(Aranan) Then
            Liste(Say, 1) = "Var"
        Else
            Liste(Say, 1) = "Yok"
        End If
    Next
    
    S2.Range("G2").Resize(UBound(Veri, 1)) = Liste

    Set S1 = Nothing
    Set S2 = Nothing
    Set Dizi = Nothing

    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
 

cimcoz

Altın Üye
Katılım
6 Ekim 2004
Mesajlar
324
Excel Vers. ve Dili
MS Office Plus 2016 & Mac OSX
Altın Üyelik Bitiş Tarihi
13-04-2027
Alternatif;

Hız olarak avantaj sağlayacaktır.

C++:
Option Explicit

Sub Varmi_Yokmu()
    Dim S1 As Worksheet, S2 As Worksheet, Dizi As Object, Aranan As String
    Dim Veri As Variant, Son As Long, X As Long, Say As Long, Zaman As Double
    
    Zaman = Timer
    
    Set S1 = Sheets("DAY1")
    Set S2 = Sheets("DAY2")
    Set Dizi = CreateObject("Scripting.Dictionary")
    
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
    Veri = S1.Range("A2:F" & Son).Value
    
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Aranan = Veri(X, 1) & "|" & Veri(X, 2) & "|" & Veri(X, 3) & "|" & Veri(X, 4) & "|" & Veri(X, 5) & "|" & Veri(X, 6)
        Dizi.Add Aranan, Nothing
    Next
    
    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
    Veri = S2.Range("A2:F" & Son).Value
    
    ReDim Liste(1 To UBound(Veri, 1), 1 To 1)
    
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Aranan = Veri(X, 1) & "|" & Veri(X, 2) & "|" & Veri(X, 3) & "|" & Veri(X, 4) & "|" & Veri(X, 5) & "|" & Veri(X, 6)
        Say = Say + 1
        If Dizi.Exists(Aranan) Then
            Liste(Say, 1) = "Var"
        Else
            Liste(Say, 1) = "Yok"
        End If
    Next
    
    S2.Range("G2").Resize(UBound(Veri, 1)) = Liste

    Set S1 = Nothing
    Set S2 = Nothing
    Set Dizi = Nothing

    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
Sayın Korhan Ayhan,

Teşekkür ederim yalnız şöyle bir hata alıyorum:
Nasıl çözebilirim?

221463
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,247
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Hep MAC OS'un işleri...

VBA nesnelerini desteklemiyor.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,247
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Üstteki mesajımda ki kodda bir tanımlamayı atlamışım. Sorun ondan olabilir. Son halini tekrar deneyiniz.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,247
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Eğer yine hata verirse aşağıdaki kodu denersiniz.

C++:
Option Explicit

Sub Varmi_Yokmu_Dizi_Yontemi()
    Dim S1 As Worksheet, S2 As Worksheet, Aranan As String, Varmi As Variant
    Dim Veri As Variant, X As Long, Son As Long, Say As Long, Zaman As Double
  
    Zaman = Timer
  
    Set S1 = Sheets("DAY1")
    Set S2 = Sheets("DAY2")
  
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
    Veri = S1.Range("A2:F" & Son).Value
  
    ReDim Liste(1 To UBound(Veri, 1), 1 To 1)
  
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Aranan = Veri(X, 1) & "|" & Veri(X, 2) & "|" & Veri(X, 3) & "|" & Veri(X, 4) & "|" & Veri(X, 5) & "|" & Veri(X, 6)
        Say = Say + 1
        Liste(Say, 1) = Aranan
    Next
  
    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
    Veri = S2.Range("A2:F" & Son).Value
  
    ReDim Kontrol(1 To UBound(Veri, 1), 1 To 1)
    Say = 0
  
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Aranan = Veri(X, 1) & "|" & Veri(X, 2) & "|" & Veri(X, 3) & "|" & Veri(X, 4) & "|" & Veri(X, 5) & "|" & Veri(X, 6)
        Varmi = Application.Match(Aranan, Liste, 0)
        Say = Say + 1
        If Not IsError(Varmi) Then
            Kontrol(Say, 1) = "Var"
        Else
            Kontrol(Say, 1) = "Yok"
        End If
    Next
  
    S2.Range("G2").Resize(UBound(Veri, 1)) = Kontrol

    Set S1 = Nothing
    Set S2 = Nothing

    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
 

cimcoz

Altın Üye
Katılım
6 Ekim 2004
Mesajlar
324
Excel Vers. ve Dili
MS Office Plus 2016 & Mac OSX
Altın Üyelik Bitiş Tarihi
13-04-2027
Eğer yine hata verirse aşağıdaki kodu denersiniz.

C++:
Option Explicit

Sub Varmi_Yokmu_Dizi_Yontemi()
    Dim S1 As Worksheet, S2 As Worksheet, Aranan As String, Varmi As Variant
    Dim Veri As Variant, X As Long, Son As Long, Say As Long, Zaman As Double
 
    Zaman = Timer
 
    Set S1 = Sheets("DAY1")
    Set S2 = Sheets("DAY2")
 
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
    Veri = S1.Range("A2:F" & Son).Value
 
    ReDim Liste(1 To UBound(Veri, 1), 1 To 1)
 
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Aranan = Veri(X, 1) & "|" & Veri(X, 2) & "|" & Veri(X, 3) & "|" & Veri(X, 4) & "|" & Veri(X, 5) & "|" & Veri(X, 6)
        Say = Say + 1
        Liste(Say, 1) = Aranan
    Next
 
    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
    Veri = S2.Range("A2:F" & Son).Value
 
    ReDim Kontrol(1 To UBound(Veri, 1), 1 To 1)
    Say = 0
 
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Aranan = Veri(X, 1) & "|" & Veri(X, 2) & "|" & Veri(X, 3) & "|" & Veri(X, 4) & "|" & Veri(X, 5) & "|" & Veri(X, 6)
        Varmi = Application.Match(Aranan, Liste, 0)
        Say = Say + 1
        If Not IsError(Varmi) Then
            Kontrol(Say, 1) = "Var"
        Else
            Kontrol(Say, 1) = "Yok"
        End If
    Next
 
    S2.Range("G2").Resize(UBound(Veri, 1)) = Kontrol

    Set S1 = Nothing
    Set S2 = Nothing

    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub

Sayın Korhan Ayhan,

Bu son kod kusursuzca ve bahsettiğiniz gibi çok hızlı çalıştı. Ellerinize sağlık.

Screenshot of Microsoft Excel (30-09-2020 22-35-21).png

Saygılarımla,
 
Üst