• DİKKAT

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

Tabloda Aranan Değerlerin Tümünü Sil

Katılım
19 Eylül 2012
Mesajlar
322
Excel Vers. ve Dili
2010 türkçe
Merhaba, A1 hücresinde yazılı değeri A5:Z100 aralığında arayıp tamamını silmek için aşağıdaki kod haricinde alternatif kod var mı?

Sheets("Sayfa1").[A5:Z100].Replace What:=Range("A1").Value, Replacement:="", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
 
Klasik döngü (For-Next) yöntemini kullanabilirsiniz. Ama verdiğiniz yönteme göre biraz yavaş kalabilir.
 
Klasik döngü (For-Next) yöntemini kullanabilirsiniz. Ama verdiğiniz yönteme göre biraz yavaş kalabilir.

deg = Range("A1").Value
For Each sil In Range("A5:Z100")
If sil = deg Then sil.Value = Delete
Next

Böyle bir şey buldum ama buda çok yavaş. İlk verdiğim örnek diğer makroların içinde çalıştırılınca sonraki makronun kasmasına sebep olduğu için onuda kullanamıyorum.
 
Hız lazımsa dizi yöntemini kullanabilirsiniz.
 
Örnek dosya paylaşırsanız yardımcı olabiliriz.
 
Hocam henüz dosyam hazır değil toparlayınca paylaşırım. Sadece yapmak istediğim şey şu A5:Z100 aralığındaki A1 değerini bulup kaç adet varsa hepsini anında silsin. Aşağıdaki kod diğer kodların arasında hata verdiriyor, diğeride çok yavaş siliyor. Eminin aranan değerleri anında bulup tamamını silecek bir kod vardır.

Sub sil_1()
Sheets("Sayfa1").[A5:Z100].Replace What:=Range("A1").Value, Replacement:="", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub


Sub sil_2()
deg = Range("A1").Value
For Each sil In Range("A5:Z100")
If sil = deg Then sil.Value = Delete
Next
End Sub
 
Belli ki dosyadaki formüller çok olduğundan silme işlemi uzun sürüyor.
Bu durumda kodun başına ve sonuna bunları ekle

Kodun başına bunu ekle
Kod:
With Application
.Calculation = xlManual
.ScreenUpdating = False
.EnableEvents = False
End With

kodun sonuna bunu ekle

Kod:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlAutomatic
End With

yani kodunuz böyle olmalı

Kod:
Sub sil_2()
With Application
.Calculation = xlManual
.ScreenUpdating = False
.EnableEvents = False
End With

deg = Range("A1").Value
For Each sil In Range("A5:Z100")
If sil = deg Then sil.Value = Delete
Next

With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlAutomatic
End With

End Sub
 
Halit hocam merhaba,
Kod çok hızlı çalışıyor. burada silme işlemini hücredeki değeri değilde hücrenin bulunduğu satırı silmek istersek yani "EntireRow.Delete" kod nasıl olur.
Kod:
deg = Range("A1").Value
For Each sil In Range("F2:F100")
If sil = deg Then
sil.EntireRow.Delete
Next
denedim olmadı.
teşekkür ederim.
 
Halit hocam merhaba,
Kod çok hızlı çalışıyor. burada silme işlemini hücredeki değeri değilde hücrenin bulunduğu satırı silmek istersek yani "EntireRow.Delete" kod nasıl olur.
Kod:
deg = Range("A1").Value
For Each sil In Range("F2:F100")
If sil = deg Then
sil.EntireRow.Delete
Next
denedim olmadı.
teşekkür ederim.

Burada örnek dosya yok ben mevcut koda hesaplamaları manuel ve sonra tekrar otomatik olmasını yaptım.
satır silme işlemlerinde kodu tersten çalıştırmak gerek
Diğer taraftan buradaki soru kodun hızlanması ile ilgilidir. sizin sorunuz farklı olduğundan örnek dosyanız ile ilgili farklı bir konu açarak sorunuzu sorun.siz
 
Son düzenleme:
i
Halit hocam merhaba,
Kod çok hızlı çalışıyor. burada silme işlemini hücredeki değeri değilde hücrenin bulunduğu satırı silmek istersek yani "EntireRow.Delete" kod nasıl olur.
Kod:
deg = Range("A1").Value
For Each sil In Range("F2:F100")
If sil = deg Then
sil.EntireRow.Delete
Next
denedim olmadı.
teşekkür ederim.
iyi günler istediğinizi yapan makro aşağıdadır. sayfanızın ismini yazmanız yeterlidir. hız olarak büyük verilerde denemedim. ancak hızlı olacağını düşünüyorum.
Kod:
Sub satir_sil()
 Dim syf As Worksheet
 Dim son As Integer
 
 Set syf = Sheets("sipariş")
 son = syf.Cells(Rows.Count, 1).End(3).Row
 With Application
.Calculation = xlManual
.ScreenUpdating = False
.EnableEvents = False
End With
For j = 1 To 30
    For i = 2 To son
        If syf.Range("A1") = syf.Cells(i, j) Then
        
           syf.Rows(i).Delete
        
        End If
    
    Next i
 Next j
 
 With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlAutomatic
End With
 
 End Sub
 
i

iyi günler istediğinizi yapan makro aşağıdadır. sayfanızın ismini yazmanız yeterlidir. hız olarak büyük verilerde denemedim. ancak hızlı olacağını düşünüyorum.
Kod:
Sub satir_sil()
Dim syf As Worksheet
Dim son As Integer

Set syf = Sheets("sipariş")
son = syf.Cells(Rows.Count, 1).End(3).Row
With Application
.Calculation = xlManual
.ScreenUpdating = False
.EnableEvents = False
End With
For j = 1 To 30
    For i = 2 To son
        If syf.Range("A1") = syf.Cells(i, j) Then
       
           syf.Rows(i).Delete
       
        End If
   
    Next i
Next j

With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlAutomatic
End With

End Sub

kodun bu bölümü
Kod:
For j = 1 To 30
    For i = 2 To son
        If syf.Range("A1") = syf.Cells(i, j) Then
        
           syf.Rows(i).Delete
        
        End If
    
    Next i
 Next j

böyle olmalı

Rich (BB code):
For j = 30 To 1 Step -1
    For i = 2 To son
        If syf.Range("A1") = syf.Cells(i, j) Then
        
           syf.Rows(i).Delete
        Exit For
        End If
    
    Next i
 Next j
 
kodun bu bölümü
Kod:
For j = 1 To 30
    For i = 2 To son
        If syf.Range("A1") = syf.Cells(i, j) Then
       
           syf.Rows(i).Delete
       
        End If
   
    Next i
Next j

böyle olmalı

Rich (BB code):
For j = 30 To 1 Step -1
    For i = 2 To son
        If syf.Range("A1") = syf.Cells(i, j) Then
       
           syf.Rows(i).Delete
        Exit For
        End If
   
    Next i
Next j
Halit hocam ben aynı veri birden fazla satırda olursa diye düşünerek bu şekilde yazdım.
 
Halit hocam ben aynı veri birden fazla satırda olursa diye düşünerek bu şekilde yazdım.

Ben yazdığınız koda bir şey demiyorum aynı veri birden fazla olması bir şey fark etmiyor kod aranan değeri bulduğu ilk satır hücresinde silme işlemini yaptığı zaman döngüyü sonlandırmalı yoksa bir alt satırdaki veriye bakar
diğer taraftan silme işlemini satırların tersinden yapmalı yoksa farklı satırlar silinir.
Örneğin A1 hücresine 1 yazın bu aranan olsun
A20 hücresine 1 yazın
A21 hücresinede 1 yazın
Şimdi kodu çalıştırın kod döngüde ilk önce 20 satırı silecektir sonrada 21 satırı silecektir püf nokta burada 20 satır silindiğinden 21 satır oldu 20 satır kod bu satırı silecektir.
 
Ben yazdığınız koda bir şey demiyorum aynı veri birden fazla olması bir şey fark etmiyor kod aranan değeri bulduğu ilk satır hücresinde silme işlemini yaptığı zaman döngüyü sonlandırmalı yoksa bir alt satırdaki veriye bakar
diğer taraftan silme işlemini satırların tersinden yapmalı yoksa farklı satırlar silinir.
Örneğin A1 hücresine 1 yazın bu aranan olsun
A20 hücresine 1 yazın
A21 hücresinede 1 yazın
Şimdi kodu çalıştırın kod döngüde ilk önce 20 satırı silecektir sonrada 21 satırı silecektir püf nokta burada 20 satır silindiğinden 21 satır oldu 20 satır kod bu satırı silecektir.
Haklısınız halit hocam sizin düzeltme yaptığınız gibi olacak. Ben dediğinizi kaçırmışım
 
Geri
Üst