• DİKKAT

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

Boş hücreleri silme sorunu

Katılım
23 Nisan 2011
Mesajlar
283
Excel Vers. ve Dili
Excel 2010 - Türkçe
Merhabalar, bir dosyanın boş satırlarını makroyla silmek istiyorum ama şu kodu yazdığımda hepsini silmiyor.
Kod:
Sub sil()
For i = 1 To [a1048576].End(xlUp).Row
If Cells(i, 1) = "" Then
Rows(i & ":" & i).Select
Selection.Delete Shift = xlUp
End If
Next
End Sub

Bunun nedeni hakkında bilgilendirebilirseniz çok sevinirim.
Örnek niteliğinde bir dosya ektedir.
 

Ekli dosyalar

Merhaba,
Sizin gönderdiğiniz kodlar A sütunuda bulduğu boş hücrenin ait olduğu tüm satırı siler, aynı satırın B veya diğer sütunlarındaki veriler de silinir.
Yapmak istediğiniz her sütundaki boş hücreleri silmek ise aşağıdaki kodları deneyin.
Kod:
Sub sil()
Application.ScreenUpdating = False
For y = 1 To 5
  For i = 1 To Cells(1048576, y).End(3).Row
   For x = 1 To Cells(1048576, y).End(3).Row
    Cells(x, y).Select
    If Cells(x, y) = "" Then Selection.Delete Shift:=xlUp
   Next
  Next
Next
End Sub

Bu kodlar A sütunundan E sütunu da dahil olmak üzere tüm boş hücreleri siler.
Daha fazla sütundaki boş hücreleri silmek için
Kod:
For y = 1 To 5
satırındaki 5 rakamını artırmalısınız.
Kolay gelsin...
 
Son düzenleme:
Sizin kodlarda bazı satırları silmemesinin sebebi;
Boş bir satırı sildiğinde altındaki boş satırın satır numarasının değişmesinden kaynaklanmaktadır.
Bunun için aşağıdaki gibi bir döngü daha kurmalısınız.
Kod:
Sub sil()
For x = 1 To [A1048576].End(3).Row
 For i = 1 To [A1048576].End(3).Row
   If Cells(i, 1) = "" Or Cells(i, 1) = " " Then
    Rows(i & ":" & i).Select
    Selection.Delete Shift = xlUp
   End If
 Next
Next
End Sub
İyi çalışmalar.
 
Son düzenleme:
Merhaba,

Satır silme işlemlerinde döngüleri tersten başlatmalısınız. Satırlar silindiğinde bir alt satır yukarı kaydığı için yukarı kayan satır kontrol dışı kalıyor. Çünkü kurduğunuz döngü artarak değerleri kontrol ediyor. Döngüyü tersten başlattığınızda bu durum ortadan kalkar ve sorun çözülmüş olur.

Aşağıdaki satırı;
Kod:
For i = 1 To [a1048576].End(xlUp).Row

Bununla değiştirip deneyin;
Kod:
For i = [a1048576].End(xlUp).Row To 1 Step -1

Farklı alternatifler üretilebilir fakat silme işlemlerinde aşağıdaki kodları kullanabilirsiniz.

1. kod az satırlı verilerde sağlıklı sonuçlar vermektedir. Satır sayınız 10.000 lerin üzerinde ise 2. kodu kullanmanız daha sağlıklı olacaktır.

Kod-1;
Kod:
Sub SİL()
    On Error Resume Next
    Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Kod-2;
Kod:
Sub SİL()
    Dim Zaman As Double, X As Long, Alan As Range
    
    Zaman = Timer
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
10  For X = Cells(Rows.Count, 1).End(3).Row To 1 Step -1
        If Cells(X, 1) = "" Then
            If Alan Is Nothing Then
                Set Alan = Cells(X, 1)
            Else
                Set Alan = Union(Alan, Cells(X, 1))
            End If
        End If
        
        If X = 1 Or X Mod 512 = 0 Then
            If Not Alan Is Nothing Then
                Alan.EntireRow.Delete
                Set Alan = Nothing
                GoTo 10
            End If
        End If
    Next
    
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    
    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format((Timer - Zaman) / 86400, "hh:mm:ss")
End Sub
 
Bizde bir alternatif sunuyoruz, boş satırları siler.
Kod:
[a1:a500].SpecialCells(4).Delete 2
 
Sn. İsmailCen, Korhan Ayhan, Seyit Tiken çok güzel bilgiler vermişsiniz, çok çok teşekkür ediyorum, emeklerinize sağlık. Ben de satır numaralarının değiştiğini fark etmiştim ama bunun sorun çıkarmasını beklemiyordum açıkçası.
Bir de Seyit Tiken'in yazdığı kodla ilgili ufak bir sorum olacaktı, kodda 4 ile 2'nin manası nedir?
 
Sayın Monelog, bunun mantığını anlamak için Makro Kaydet yöntemine başvurmak lazım. Makro olaylarının beli bir sırası var, bu sıra, kelime olarak gösteriliyor, kodu biraz daha kısa göstermek babında ilgili yere rakam kullanılıyor, her olayda bu olmuyor.
 
Cevabınız için çok teşekkür ediyorum Sn. Seyit Tiken...
 
Geri
Üst