• DİKKAT

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

Aradaki satırları silecek macro kodu nedir?

Katılım
24 Mayıs 2007
Mesajlar
18
Excel Vers. ve Dili
Office 2007
Merhaba herkese,

Çalıştığım yerde kullandığım programdan aldığım programın düzenlenmesi gerekiyor kullanışlı bir hale gelmesi için. Arada -- şeklinde boş satırlar oluşuyor raporda bunları bir macro ile silmek istiyorum. Önce for döngüsü ile düşündüm ama o satır sayısı değişebilir o zaman işe yaramaz macro. A sütununda malzemelerin kodları var. Kodlar her zaman H,K,Y,I harfleriyle başlar acaba bu harflerle başlamayan tüm satırları silecek bir macro olabilir mi? Do While gibi bişe. Şimdiden teşekkürler
 

Ekli dosyalar

Merhaba,

Harf kontrolü yapmadım.

Kod:
Sub SatırSil()
Application.ScreenUpdating = False
Dim i As Long, son As Long
son = Cells(Rows.Count, "A").End(xlUp).Row
    For i = son To 1 Step -1
        If Cells(i, "A") Like "*=*" Then
            Rows(i).Delete Shift:=xlUp
        End If
    Next i
Application.ScreenUpdating = True
End Sub
.
 
Teşekkürler cevap için. Şöylede bir durum var mesela 60 satırdan sonra araya bir boşluk sonra tekrar rapor başlığı gibi bir satır geliyor. Ekliyorum dosyayı tekrar. O kısımlarıda atmak için nası geliştirmek lazım. Birde do while döngüsü tarzı bir şey kullanılabilir mi? Aynı zamanda ödev hazırlıyorum bu dosyayı o nedenle do while, for döngüsü birşey kullanabilirsem daha güzel olacak. Teşekkürler...
 

Ekli dosyalar

For döngüsü ile;

Kod:
Sub ForSatırSil()
Application.ScreenUpdating = False
Dim i As Long, son As Long
son = Cells(Rows.Count, "A").End(xlUp).Row
    For i = son To 1 Step -1
        If IsNumeric(Cells(i, "F")) = False Or Cells(i, "F") = "" Then
            Rows(i).Delete Shift:=xlUp
        End If
    Next i
Application.ScreenUpdating = True
End Sub

Do While döngüsülü ile;

Kod:
Sub DoSatirSil()
Application.ScreenUpdating = False
Dim son As Long
son = Cells(Rows.Count, "A").End(xlUp).Row
Do
If IsNumeric(Cells(son, "F")) = False Or Cells(son, "F") = "" Then
    Rows(son).Delete Shift:=xlUp
End If
son = son - 1
Loop While son > 1
Application.ScreenUpdating = True
End Sub

.
 
Teşekkürler, for döngüsünü kullandım çok işime yaradı. Aşağıdaki iki satırın programda ne işe yaradıklarını açıklayabilir misiniz rica etsem, bu dosyayı ödev olarak hazırlıyorum aynı zamanda.
Application.ScreenUpdating = False
Application.ScreenUpdating = True
 
Bu kodu kullandım.. Ancak mümkünse şu bölümün ; If IsNumeric(Cells(i, "F")) = False Or Cells(i, "F") = "" Then , özellikle "A" "F" nedir ?ve long neyi ifade ediyor (sayı mı) almam mümkün mü? Yardım için teşekkür ..

Sub ForSatırSil()
Application.ScreenUpdating = False
Dim i As Long, son As Long
son = Cells(Rows.Count, "A").End(xlUp).Row
For i = son To 1 Step -1
If IsNumeric(Cells(i, "F")) = False Or Cells(i, "F") = "" Then
Rows(i).Delete Shift:=xlUp
End If
Next i
Application.ScreenUpdating = True
End Sub
 
Vba nın veri tipine göre atayacağı değerdir. Long .......... -2,147,483,648 ile 2,147,483,647 sayıları arasında değer üretir.

i ve son değişkenlerini bu yüzden Long olarak tanımladık.

Cells(i, "F") ve Cells(i, "A")

F sütunu ve A sütununu ifade eder.

.
 
Sonuç olarak bu kodu şu şekilde yorumlayabilir miyim ? Aplication. .. ile olan kodlar sayesinde yapılan işlemler ekranda görünmüyor ve direk biz sonucu görüyoruz. Long olan i ve son adlı iki değişken tanımlıyoruz. Son değişkeni A sütununun son hücresine kadar saydırıp sonu belirliyoruz. For döngüsü ile i değişkeninin A sütunundaki son hücreden bir geriye gelerek ilk hücreye ulaşmasını sağlıyoruz Koşul olarakta; A dan F sütununa kadar olan hücrelerde sayısal değerler veya yazı varsa bunu yanlış (false) olarak belirtip geri kalan sütunları sildiriyoruz.Ödevi teslim etmem için tam anlatmam lazım... Yanlış anlattığım yerleri düzeltebilir misin? Teşekkürler
 
Sub ForSatırSil() ' ile kodun çalışmasına başlarız.

....................................................................................

Application.ScreenUpdating = False

Buradaki false ile ekran görüntüsünü kapatıyoruz.

....................................................................................

Dim i As Long, son As Long ' ile i ve son değerlerini Long ile tanımlarız.

....................................................................................

son = Cells(Rows.Count, "A").End(xlUp).Row

son değeri bulurken saydırma değilde klavye kısayolları ile işlemi yaptırıyoruz.

Manuel olarak sizde klavye ile deneyiniz.

A1:A5 hücresine kadar değer olduğunu düşünelim. Siz İmleç A30 hücresinde iken ctrl tuşuna basılı tutarak yukarı ok tuşuna basarsanız A sütunundaki son değer olan A5 hücresine gidersiniz. İşte burada yapılan son değer bulma işi bu şekilde oluyor. Dikkat ederseniz A30 hücresinden bu işlemi yaptırdım. Fakat bizim kodda kullandığımız

Rows.Count

Kodu; excel sayfasındaki toplam satır sayısınız verir. Bu kodu kullanmamdaki neden ise 2003 versiyonlu excellerde satır sayısı 65536 iken 2003 versiyon üstünde bu sayı 1.048.576 dır. Bu yüzden,

Cells(65536, "A").End(xlUp).Row

yada

Cells(1.048.576, "A").End(xlUp).Row

versiyon farklılıklarında hata yapmamak için toplam satır sayısını,

Rows.Count ile bulurak işlemi yaparız.

Cells(Rows.Count, "A").End(xlUp).Row

gibi. Buradaki xlup yukarı ok tuşunun kod karşılığıdır. Row ise bulunan satırın numarasını verir. Yani burada sütununda son satırda ctrl yukarı ok tuşu ile A sütunundaki son satır numarası bulunur.

....................................................................................

For i = son To 1 Step -1

Burada ise for ile döngü kurulur. Fakat bu döngü step ile ileri doğru değil geriye doğru yapılır.

step kullanılmasındaki nedeni Linkte #7 nolu mesajda açıklamaya çalışmıştım.

....................................................................................

If IsNumeric(Cells(i, "F")) = False Or Cells(i, "F") = "" Then

Bu kodla i döngüsü ile F sütununda sayı olmayan ( False ) Yada boş olan hücreleri bulup,

....................................................................................

Rows(i).Delete Shift:=xlUp

bu kod ile sileriz.

Geri kalan

End İf ' if şartının bitimi,

Next i ' i döngünün bitimi,

Application.ScreenUpdating = True ile ekran görüntüsünü geri açar,

End Sub ile işlemi bitiririz.

Hızlı yazdığım için, eğer yazım hatası varsa kusuruma bakmayınız.

.
 
Çok teşekkürler, yardımlar için. Çok açıklayıcı olmuş ...
 
Geri
Üst