Yinelenen değerleri şarta göre silme.

Biray3550

Altın Üye
Katılım
29 Mayıs 2021
Mesajlar
46
Excel Vers. ve Dili
Microsoft Office Professional Plus 2021
Altın Üyelik Bitiş Tarihi
29-05-2026
Merhaba, A Kolonundaki yinelenen değerleri D Kolonundaki veri sıfır ise sıfır olan yinelenen değerlerin olduğu satırı silmeyi nasıl hızlandırabilirim?
Aşağıdaki macro çok yavaş çalışıyor.Veri 150 Bin olduğu için.
Teşekkür ederim.



Sub SilYinelenenVeSifir()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim ws As Worksheet
Dim lastRow As Long
Dim rng As Range
Dim cel As Range
Dim dict As Object

Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set dict = CreateObject("Scripting.Dictionary")
For Each cel In ws.Range("A1:A" & lastRow)
If Not dict.Exists(cel.Value) Then
dict.Add cel.Value, cel.Row
Else
If ws.Cells(cel.Row, "D").Value = 0 Then
ws.Rows(cel.Row).Delete
End If
End If
Next cel

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
 

Ekli dosyalar

Cengiz Demir

Altın Üye
Katılım
29 Haziran 2018
Mesajlar
597
Excel Vers. ve Dili
Office 365 TR (32 Bit)
Altın Üyelik Bitiş Tarihi
05-04-2025
Makrosuz çözüm isterseniz.
Listeyi filtreleyin. Stok kodunu renge göre, Alış Fiyatını 0 olarak filtreleme yapın.
Süzülmüş satırları silin. :)
 

Biray3550

Altın Üye
Katılım
29 Mayıs 2021
Mesajlar
46
Excel Vers. ve Dili
Microsoft Office Professional Plus 2021
Altın Üyelik Bitiş Tarihi
29-05-2026
Onu biliyorum. :) Teşekkür ederim.
 

Ziynettin

Destek Ekibi
Destek Ekibi
Katılım
18 Nisan 2008
Mesajlar
1,105
Excel Vers. ve Dili
office2010
Bu şekilde deneyin.

Kod:
Sub test()
Dim a(), b(), dc As Object, ds As Object
Dim s1 As Worksheet, son As Long, Say As Long
Dim i As Long, j As Byte, krt As String, krt1 As Long
Set s1 = Sheets("veri")
Set dc = CreateObject("scripting.dictionary")
Set ds = CreateObject("scripting.dictionary")
son = s1.Range("A" & Rows.Count).End(3).Row

a = s1.Range("A1:D" & son).Value
ReDim b(1 To UBound(a), 1 To 4)

For i = 2 To UBound(a)
    If a(i, 1) <> "" Then
        krt = CStr(a(i, 1))
        dc(krt) = dc(krt) + 1
        If a(i, 4) = 0 Then
            If dc(krt) > 1 Then ds(i) = ""
        End If
        krt1 = i
        If Not ds.exists(krt1) Then
            Say = Say + 1
            For j = 1 To 4
                b(Say, j) = a(i, j)
            Next j
        End If
    End If
Next i

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
If Say >= 0 Then
    s1.Range("A2:D" & son).ClearContents
    s1.[A2].Resize(Say, 4) = b

End If
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox "İşlem tamam.", vbInformation
End Sub
 

Biray3550

Altın Üye
Katılım
29 Mayıs 2021
Mesajlar
46
Excel Vers. ve Dili
Microsoft Office Professional Plus 2021
Altın Üyelik Bitiş Tarihi
29-05-2026
Teşekkür ederim. Elinize sağlık.
 
Üst