CATATAN : Saya bermaksud menjadikan ini "pos satu atap" tempat Anda dapat menggunakan Correct
cara untuk menemukan baris terakhir. Ini juga akan mencakup praktik terbaik yang harus diikuti ketika menemukan baris terakhir. Dan karenanya saya akan terus memperbaruinya setiap kali saya menemukan skenario / informasi baru.
Cara yang tidak dapat diandalkan untuk menemukan baris terakhir
Beberapa cara paling umum untuk menemukan baris terakhir yang sangat tidak dapat diandalkan dan karenanya tidak boleh digunakan.
- DigunakanRange
- xlDown
- CountA
UsedRange
harus TIDAK PERNAH digunakan untuk menemukan sel terakhir yang memiliki data. Ini sangat tidak bisa diandalkan. Coba percobaan ini.
Ketikkan sesuatu di sel A5
. Sekarang ketika Anda menghitung baris terakhir dengan salah satu metode yang diberikan di bawah ini, itu akan memberi Anda 5. Sekarang warna sel A10
merah. Jika sekarang Anda menggunakan salah satu kode di bawah ini, Anda masih akan mendapatkan 5. Jika Anda menggunakan Usedrange.Rows.Count
apa yang Anda dapatkan? Tidak akan 5.
Berikut ini adalah skenario untuk menunjukkan cara UsedRange
kerjanya.
xlDown
sama-sama tidak bisa diandalkan.
Pertimbangkan kode ini
lastrow = Range("A1").End(xlDown).Row
Apa yang akan terjadi jika hanya ada satu sel ( A1
) yang memiliki data? Anda akan mencapai baris terakhir di lembar kerja! Ini seperti memilih sel A1
dan kemudian menekan Endtombol dan kemudian menekan Down Arrowtombol. Ini juga akan memberi Anda hasil yang tidak dapat diandalkan jika ada sel kosong dalam rentang.
CountA
juga tidak dapat diandalkan karena akan memberi Anda hasil yang salah jika ada sel kosong di antaranya.
Dan karenanya seseorang harus menghindari penggunaan UsedRange
, xlDown
dan CountA
untuk menemukan sel terakhir.
Temukan Baris Terakhir dalam Kolom
Untuk menemukan Baris terakhir di Kolom E gunakan ini
With Sheets("Sheet1")
LastRow = .Range("E" & .Rows.Count).End(xlUp).Row
End With
Jika Anda perhatikan bahwa kami memiliki .
sebelumnya Rows.Count
. Kami sering memilih untuk mengabaikannya. Lihat pertanyaan INI tentang kemungkinan kesalahan yang mungkin Anda dapatkan. Saya selalu menyarankan menggunakan .
sebelum Rows.Count
dan Columns.Count
. Pertanyaan itu adalah skenario klasik di mana kode akan gagal karena Rows.Count
pengembalian 65536
untuk Excel 2003 dan sebelumnya dan 1048576
untuk Excel 2007 dan yang lebih baru. Demikian pula Columns.Count
pengembalian 256
dan 16384
, masing-masing.
Fakta di atas bahwa Excel 2007+ memiliki 1048576
baris juga menekankan pada fakta bahwa kita harus selalu mendeklarasikan variabel yang akan menyimpan nilai baris karena Long
alih-alih Integer
Anda akan mendapatkan Overflow
kesalahan.
Perhatikan bahwa pendekatan ini akan melewati setiap baris tersembunyi. Melihat kembali tangkapan layar saya di atas untuk kolom A , jika baris 8 disembunyikan, pendekatan ini akan kembali 5
sebagai gantinya 8
.
Temukan Baris Terakhir dalam Lembaran
Untuk menemukan Effective
baris terakhir di lembar, gunakan ini. Perhatikan penggunaan Application.WorksheetFunction.CountA(.Cells)
. Ini diperlukan karena jika tidak ada sel dengan data di lembar kerja maka .Find
akan memberi AndaRun 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
Temukan Baris Terakhir dalam Tabel (ListObject)
Prinsip yang sama berlaku, misalnya untuk mendapatkan baris terakhir di kolom ketiga tabel:
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