Soru 2 sütunu karşılaştırıp aynı olan satırların silinmesi.

Katılım
16 Ağustos 2021
Mesajlar
16
Excel Vers. ve Dili
excel 2019
Merhaba Arkadaşlar 2 adet sütun var aynı sayfada biri h biride f kolunu bunlardaki her satırı karşılaştırıp sayısal değerler aynı olan satırların silinmesi gerekiyor, bu arada bu kolonlardaki satır sayısı değişken. Bunu nasıl yazabilirim makro olarak .
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Merhaba,

Deneyiniz.
Kod:
Sub test()

    Dim d As Range, i As Long
    
    Application.ScreenUpdating = False
    
    For i = 1 To Cells(Rows.Count, "F").End(xlUp).Row
        If Cells(i, "F") <> "" Then
            If Cells(i, "F") = Cells(i, "H") Then
                If d Is Nothing Then
                    Set d = Rows(i)
                Else
                    Set d = Application.Union(d, Rows(i))
                End If
            End If
        End If
    Next i
    
    If Not d Is Nothing Then
        d.Delete
        MsgBox "Silindi."
    End If
    
    Application.ScreenUpdating = True

End Sub
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Hata aldığınız örnek bir dosya ekler misiniz.


.
 
Katılım
16 Ağustos 2021
Mesajlar
16
Excel Vers. ve Dili
excel 2019
yok yazanların ve sayı olarak aynı olmayan satırların kalması gerekiyor.
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Deneyiniz.
Kod:
Private Sub CommandButton1_Click()
    Dim d As Range, i As Long
    
    Application.ScreenUpdating = False
    
    For i = 1 To Cells(Rows.Count, "F").End(xlUp).Row
        If IsError(Cells(i, "F")) = False And IsError(Cells(i, "H")) = False Then
            If Cells(i, "F") = Cells(i, "H") Then
                If d Is Nothing Then
                    Set d = Rows(i)
                Else
                    Set d = Application.Union(d, Rows(i))
                End If
            End If
        End If
    Next i
    
    If Not d Is Nothing Then
        d.Delete
        MsgBox "Silindi."
    End If
    
    Application.ScreenUpdating = True
    
End Sub
 
Katılım
16 Ağustos 2021
Mesajlar
16
Excel Vers. ve Dili
excel 2019
burdaki
Set d = Rows(i)
Else
Set d = Application.Union(d, Rows(i)) şunların ne işe yaradığını açıklarmırmısınız.
bide satır silme işlemindeki kodu.
If Not d Is Nothing Then
d.Delete
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
For i döngüsüyle ve sonrasında if şartlarıyla bulmaya çalıştığımız Rows(i) ilgili şarta uyan satır(lar) demektir.
Biz bu şarta uyan satırları set yardımıyla "d" adında değişken tanımladık ve bu tanımladığımız değişkenleri union metodu ile bir diziye alarak ve son olarak bu dizideki satırları d.delete ile toplu halde sileriz.

If d Is Nothing Then ' d değiştekinde değer yoksa sadece, set ile d ye Rows(i) tanıtılır.
Set d = Rows(i)
Else ' değer varsa yani ilk şart oluşmuyorsa set ile d ye daha önce yazdırdığımız ilk d değişkeni ve yeni gelecek olan Rows(i) değerleri diziye alınarak tanıtılır(birleştirilir)
Set d = Application.Union(d, Rows(i))
End If

Aşağıda ise eğer tüm bu işlemlerinden sonunda d değişkeni değer varsa yani silinecek satır varsa d.delete ile d değişkenine aldığımız satırları toplu halde sil yazdık.
If Not d Is Nothing Then
d.Delete
end if

Biraz karışık yazmış olabilirim, kısaca bu şekilde açıklanabilir.
 
Katılım
16 Ağustos 2021
Mesajlar
16
Excel Vers. ve Dili
excel 2019
If IsError(Cells(i, "F")) = False And IsError(Cells(i, "H")) = False bu satırı tam anlayamadım.
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Eğer "F" sütunundaki ilgili satır ve "H" sütunundaki ilgili satır hatalı değilse işleme devam et.
 
Üst