3 พฤษภาคม 2555

[099] หาบรรทัดสุดท้ายใน Excel (Find Last Row With Excel VBA)

จดไว้กันลืม เพราะมีหลายวิธี ซึ่งแต่ละวิธีให้ผลแตกต่างกัน แล้วแต่ว่าจะใช้แถวใน Range หรือว่าแถวใน Sheet

อย่างแรกแถวใน Range 


แถวสุดท้ายจาก ActiveSheet.UsedRange.Rows.Count จะผลเป็น 6 เพราะนับเฉพาะแถวใน Range ที่ใช้งานจริง ๆ (จากตัวอย่าง แถวที่ 1 และ 2 ไม่ได้ใช้)

อย่างที่สอง แถวใน Sheet จะเป็นวิธีในการใช้คำสั่ง Go To Special ซึ่งปกติจะใช้วิธีนี้ในการหาแถวสุดท้าย เพราะจะไล่ทำงานจากแถวที่ 1 หรือแถวที่รู้แล้ว


ถ้าเรียกคำสั่ง Selection.SpecialCells(xlCellTypeLastCell).Row หรือ ActiveCell.SpecialCells(xlCellTypeLastCell).Row จะได้ผลเป็น 8 เหมือนกัน


    Dim lastRow As Long
    lastRow = Selection.SpecialCells(xlCellTypeLastCell).Row
    For r = 1 To lastRow
        'do something
    Next


อันนี้ลองเขียนขึ้นมาเป็น function ดู โดยอ้างจาก Rows range object จากที่ลองแบบนี้ได้ผลแน่นอนดี แค่ส่ง WorkSheet ที่ต้องการหาใน function ก็จะได้แถวสุดท้ายจริง ๆ มา (ในตัวอย่างแรก จะได้ 8)


'หาบรรทัดสุดท้ายของ worksheet หรือ range ที่สนใจ
'ห้ามส่ง Range แบบ Rows หรือ Columns มาเพราะจะได้ค่าสูงสุด 65536 แทน
Public Function FindLastRow(searchObject As Variant) As Long
    Dim r As Range
    
    Select Case TypeName(searchObject)
        Case "Worksheet": Set r = searchObject.UsedRange.Rows
        Case "Range": Set r = searchObject.Rows
        Case Else: Exit Function
    End Select
    
    FindLastRow = r.Rows(r.Count).Row
End Function


( ◕ ‿‿ ◕ )

เกี่ยวกับเจ้าของบล๊อก

รูปภาพของฉัน

เป็นโปรแกรมเมอร์ที่ฝันว่าจะได้นอนเกาพุงไปวัน ๆ จนพุงลดกลายเป็นเอว ได้เป็นบุคคลที่มีความสุขที่สุดในโลกจนคนอื่น ๆ อิจฉา