NOT : Bunu Correct
son satırı bulmak için kullanabileceğiniz bir "tek durak sonrası" yapmak niyetindeyim . Bu ayrıca son satırı bulurken izlenecek en iyi uygulamaları da kapsayacaktır. Ve böylece yeni bir senaryo / bilgi ile karşılaştığımda güncellemeye devam edeceğim.
Son satırı bulmanın güvenilir olmayan yolları
Son sırada güvenilir olmayan ve bu nedenle asla kullanılmaması gereken en yaygın yollardan bazıları.
- UsedRange
- xlDown
- COUNTA
UsedRange
gerektiğini ASLA verilerine sahip son hücreyi bulmak için kullanılabilir. Son derece güvenilmez. Bu denemeyi deneyin.
Hücreye bir şey yazın A5
. Şimdi son satırı aşağıda verilen yöntemlerden herhangi biriyle hesapladığınızda, size 5 değerini verecektir. Şimdi hücreyi A10
kırmızı renklendirin . Şimdi aşağıdaki kodlardan herhangi birini kullanırsanız, yine de 5 Usedrange.Rows.Count
elde edersiniz. 5 olmayacak.
İşte nasıl UsedRange
çalıştığını gösteren bir senaryo .
xlDown
eşit derecede güvenilmezdir.
Bu kodu düşünün
lastrow = Range("A1").End(xlDown).Row
A1
Verileri olan tek bir hücre ( ) olsaydı ne olurdu ? Sonunda çalışma sayfasındaki son satıra ulaşacaksınız! Hücreyi seçmek A1
, sonra tuşuna Endbasmak ve sonra tuşuna Down Arrowbasmak gibidir. Bu, bir aralıkta boş hücreler varsa size güvenilir olmayan sonuçlar verir.
CountA
aynı zamanda güvenilmezdir, çünkü arada boş hücreler varsa yanlış sonuç verir.
Ve dolayısıyla bir kullanmaktan kaçınmalıdır UsedRange
, xlDown
ve CountA
son hücreyi bulmak için.
Bir Sütundaki Son Satırı Bul
Col E'deki son Satırı bulmak için bunu kullanın
With Sheets("Sheet1")
LastRow = .Range("E" & .Rows.Count).End(xlUp).Row
End With
Daha .
önce bir tane olduğunu fark ederseniz Rows.Count
. Bunu sıklıkla görmezden gelmeyi tercih ettik. Alabileceğiniz olası hata hakkında BU soruya bakın . Ben her zaman .
önce Rows.Count
ve kullanmanızı öneririz Columns.Count
. Bu soru, Excel 2003 ve önceki sürümleri ile Excel 2007 ve sonraki sürümleri için Rows.Count
döndürdüğü 65536
için kodun başarısız olacağı klasik bir senaryodur 1048576
. Benzer şekilde sırasıyla ve değerini Columns.Count
döndürür .256
16384
Yukarıdaki Excel 2007+ 1048576
satırları olduğu gerçeği, satır değerini tutacak değişkeni her zaman bildirmemiz gerektiğine vurgu yapar, Long
bunun yerine Integer
bir Overflow
hata alırsınız .
Bu yaklaşımın gizli satırları atlayacağını unutmayın. Yukarıdaki A sütununun ekran görüntüsüne baktığımda , 8. satır gizlenmişse, bu yaklaşım 5
bunun yerine geri dönecektir 8
.
Sayfadaki Son Satırı Bul
Sayfadaki Effective
son satırı bulmak için bunu kullanın. Kullanımına dikkat edin Application.WorksheetFunction.CountA(.Cells)
. Bu gereklidir, çünkü çalışma sayfasında veri içeren hiçbir hücre .Find
yoksaRun Time Error 91: Object Variable or With block variable not set
With Sheets("Sheet1")
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastrow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lastrow = 1
End If
End With
Tablodaki Son Satırı Bul (ListObject)
Aynı ilkeler, örneğin bir tablonun üçüncü sütunundaki son satırı almak için geçerlidir:
Sub FindLastRowInExcelTableColAandB()
Dim lastRow As Long
Dim ws As Worksheet, tbl as ListObject
Set ws = Sheets("Sheet1") 'Modify as needed
'Assuming the name of the table is "Table1", modify as needed
Set tbl = ws.ListObjects("Table1")
With tbl.ListColumns(3).Range
lastrow = .Find(What:="*", _
After:=.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
End With
End Sub