Bu yazıyı exceltr.net altında okumak için tıklayın
Bana sorulan bir soru üzerine Excel’de son satırı bulmak için kullanılan yöntemleri açıklamak ishtiyacı hissettim.
Son satırdan kasıt ne olabilir?
worksheet’in son kullanılan hücresininin bulunduğu satır.
belirli bir sütun için kullanılan son satırdan kastediliyor olabilir
bu iki seçenek için de kullanılan son hücreden kasıt çoğu durumda veri içeren son hücredir.
Öncelikle vba kullanmadan bir sayfada son hücreye gitmenin iki basit yolu var
1- CTRL+END tuş kombinasyonu
2- F5 e basıldığında açılan menüden Özel butonuna basılarak ulaşılan menüden Son hücreyi işaretleyim tamam a tıklamak. Aşağıdaki ekran görüntülerine bakın
Birkaç deneme yaparsanız Excel’in son hücreden kastının veri içeren son hücre olmadığını göreceksiniz. Bir hücrede veri olmayabilir fakat üzerinde işlem yapılmış ise Excel için o dolu bir hücredir. Fakat son hücre her zaman dolu olan en son hücre değildir.
şu örneğe bir bakın. Taze açılmış bir excel çalışma sayfası. Sadece ilk satır ve sütunlara veri girilmiş ve başka hiçbir işlem yapılmamış.Seçili olan hücre yukarıda bahsedilen iki şekilde de ulaşılabilen son hücredir. Ama veri yok. şekillendirme yok. Görünmeyen karakter yok. Peki neden o hücre ? Cevap açık: dolu olan en son satır ile dolu olan en son sütunun kesişimi.
şimdi aynı sayfada g8 hücresini kırmızıya boyuyorum. Tekrar son hücreye gittiğimde bu sefer g8 hücresi seçilecek. kırmızıya boyamak yerine sadece yazı tipini de değiştirebilirdim (yazı içermese de ).Sonuç aynı olurdu. Demek ki son hücre bi çeşit değilmiş. Şimdi bir tavsiye verip VBA ile son hücre kısmına geçelim.
Zaman zaman excel hücrelerinin içeriğiyle orantısız şekilde büyük boyutlarda olduğunu görürsünüz. Genelde suçlusu boş görünse de son hücrenin sağında ve üstünde kalan alanların boş veri içerseler bile yer kaplamasıdır. Bu ayrı bir konu ve çözümü var.
Şimdi VBA ile son hücre , son satır ve son sütun nasıl bulunur nasıl bulunmaz görelim. Çok çeşitli yollar var. Bütün seçenekleri göstermek yerine öğretici bir iki tane ile yetinmeyi düşünüyorum. Örneklerde hem son hücreyi hem son satır ve sütunu bulmayı tek seferde gösterebilmek için hep son satırı arıyorum.
Örnek 1
- sütundaki son satır. cells içerisindeki 1 değiştirilerek başka sütunlar üzerinden de son satır bulunabilir. Bu fonksiyonu biraz evirdiğimizde çok başarılı olacak.
SonSatir = Cells(Rows.Count, 1).End(xlUp).Row //tam sayı
SonSutun=Cells(Rows.Count, 1).End(xlUp).Column // tam sayı
SonHucre=Cells(Rows.Count, 1).End(xlUp)
Örnek 2: Kötü örnek
- sütundaki son satır. Bu sefer cells yerine range var. 2. sütun için A yerine B yazılmalı.
Dezavantajları: alt snır elle yazılmış.Excel 2003 için doğru sonucu verir, 2007 ve 2010 için alt sınırı çoook ileride.yukarıdaki örnekler alt sınırı rows.count ile son mümkün satır olarak belirliyorlar.
range kullanılması parametrik bir fonksiyona çevrilmesini zorlaştırır. doğrudan sütun numarası yerine string birleştirmeyi zorunlu kılar
yavaş çalışır. Sık kullanmıyor iseniz problem sayılmaz
SonSatir= Range("A65536").End(xlup).Row
Örnek 3:
Tüm sayfadaki son satırı buluyor. Fakat excel’in anladığı anlamda son hücreyi buluyor. Gerçek son hücre buna eşit veya bundan daha küçüktür.
Performans sıkıntınız veya kesin sonuç derdiniz yoksa bu fonksiyonun tüm verileri kapsayan bir alanı vereceğine güvenebilirsiniz
Cells yerine range kullanılması mümkündür. Dezavantajlarını yukarıda saydık.
SonSatir = Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row
Örnek 4:
Sayfadaki veri içeren son satırı bulur.ilk örnekten bazı durumlarda yavaş çalışır. sütun belirlemenize gerek yok
LastRow = Cells.Find(What:="*", After:=Cells(1, 1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Örnek 5:
- hücrede ilk boş hücrenin konumunu verir. . Eğer id sütunu gibi boş olamaycak sütunlarda kullanacak olsanız bile asla bunu kullanmayın.
SonSatir= Cells(1,1).End(xlDown).Row
Bu kadar örnek yeter. Benim favorim 1. örnekteki. Şimdi bunu fonksiyon haline getirelim. integer sınırını yetersiz görüp long kullanıyorum
Public Function SonSatir( ws as Worksheet, iSutun As Long) As Long
SonSatir = ws.Cells(Rows.count, iSutun).End(xlUp).Row
End Function
Fakat dikkat edin. Bu fonksiyon bazı durumlarda hata verecek. eğer bu fonksiyon çalışırken bir grafik sayfası aktif ise Rows.count işlemi grafik sayfasında gerçekleştirilmeye çalışılacak ve hata oluşacak. Tüm range atamalarını worksheet hata workbook ile yapmak en sağlıklısı.
Küçük bir düzeltme yapalım:
Public Function SonSatir( ws as Worksheet, iSutun As Long) As Long
SonSatir = ws.Cells(ws.Rows.count, iSutun).End(xlUp).Row
End Function
Görüşmek üzere