หมายเหตุ : ฉันตั้งใจจะทำให้เป็น "การโพสต์แบบครบวงจร" ที่คุณสามารถใช้Correct
วิธีการค้นหาแถวสุดท้าย สิ่งนี้จะครอบคลุมแนวทางปฏิบัติที่ดีที่สุดที่จะต้องปฏิบัติเมื่อค้นหาแถวสุดท้าย และด้วยเหตุนี้ฉันจะอัปเดตมันต่อไปทุกครั้งที่ฉันเจอสถานการณ์ / ข้อมูลใหม่
วิธีที่ไม่น่าเชื่อถือในการค้นหาแถวสุดท้าย
วิธีที่พบได้บ่อยที่สุดในการค้นหาแถวสุดท้ายซึ่งไม่น่าเชื่อถือสูงและดังนั้นจึงไม่ควรใช้
- UsedRange
- xlDown
- COUNTA
UsedRange
ไม่ควรใช้เพื่อค้นหาเซลล์สุดท้ายที่มีข้อมูล มันไม่น่าเชื่อถือสูง ลองการทดลองนี้
A5
พิมพ์สิ่งที่อยู่ในมือถือ ตอนนี้เมื่อคุณคำนวณแถวสุดท้ายด้วยวิธีการใด ๆ ที่ระบุด้านล่างก็จะให้ 5 ตอนนี้สีเซลล์A10
สีแดง หากคุณใช้รหัสด้านล่างใด ๆ คุณจะยังคงได้รับ 5 หากคุณใช้Usedrange.Rows.Count
สิ่งที่คุณได้รับ มันจะไม่เป็น 5
นี่คือสถานการณ์ที่แสดงให้เห็นว่าUsedRange
ทำงานอย่างไร
xlDown
ไม่น่าเชื่อถือเท่ากัน
พิจารณารหัสนี้
lastrow = Range("A1").End(xlDown).Row
จะเกิดอะไรขึ้นหากมีเพียงเซลล์เดียว ( A1
) ซึ่งมีข้อมูล คุณจะไปถึงแถวสุดท้ายในแผ่นงาน! มันก็เหมือนกับการเลือกมือถือA1
แล้วกดEndคีย์แล้วกดDown Arrowคีย์ สิ่งนี้จะให้ผลลัพธ์ที่ไม่น่าเชื่อถือหากมีเซลล์ว่างในช่วง
CountA
ไม่น่าเชื่อถือเพราะจะให้ผลลัพธ์ที่ไม่ถูกต้องหากมีเซลล์ว่างในระหว่างนั้น
และด้วยเหตุนี้ควรหลีกเลี่ยงการใช้UsedRange
, xlDown
และCountA
เพื่อหาเซลล์สุดท้าย
ค้นหาแถวสุดท้ายในคอลัมน์
ในการค้นหาแถวสุดท้ายใน Col E ให้ใช้สิ่งนี้
With Sheets("Sheet1")
LastRow = .Range("E" & .Rows.Count).End(xlUp).Row
End With
ถ้าคุณสังเกตเห็นว่าเรามีก่อน.
Rows.Count
เรามักเลือกที่จะเพิกเฉย ดูคำถามนี้เกี่ยวกับข้อผิดพลาดที่คุณอาจได้รับ ฉันมักจะแนะนำให้ใช้.
ก่อนและRows.Count
Columns.Count
คำถามนั้นเป็นสถานการณ์แบบคลาสสิกที่รหัสจะล้มเหลวเนื่องจากการRows.Count
ส่งคืน65536
สำหรับ Excel 2003 และรุ่นก่อนหน้าและ1048576
สำหรับ Excel 2007 และใหม่กว่า Columns.Count
ผลตอบแทนในทำนองเดียวกัน256
และ16384
ตามลำดับ
ความจริงข้างต้นที่ Excel 2007+ มี1048576
แถวยังเน้นถึงความจริงที่ว่าเราควรประกาศตัวแปรซึ่งจะเก็บค่าแถวไว้เสมอLong
แทนที่จะเป็นInteger
อย่างอื่นคุณจะได้รับOverflow
ข้อผิดพลาด
โปรดทราบว่าวิธีการนี้จะข้ามแถวที่ซ่อนอยู่ มองย้อนกลับไปที่หน้าจอของฉันข้างต้นสำหรับคอลัมน์ Aถ้าแถว 8 ถูกซ่อนไว้วิธีนี้จะกลับมาแทน5
8
ค้นหาแถวสุดท้ายในชีต
หากต้องการค้นหาEffective
แถวสุดท้ายในแผ่นงานให้ใช้สิ่งนี้ Application.WorksheetFunction.CountA(.Cells)
ขอให้สังเกตการใช้งานของ สิ่งนี้จำเป็นเพราะถ้าไม่มีเซลล์ที่มีข้อมูลในแผ่นงานก็.Find
จะให้คุณRun 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
ค้นหาแถวสุดท้ายในตาราง (ListObject)
ใช้หลักการเดียวกันเช่นเพื่อรับแถวสุดท้ายในคอลัมน์ที่สามของตาราง:
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