Excel VBA: Get Last Cell Containing Data within Selected Range

后端 未结 3 527
清酒与你
清酒与你 2021-01-06 04:51

How do I use Excel VBA to get the last cell that contains data within a specific range, such as in columns A and B Range(\"A:B\")?

相关标签:
3条回答
  • 2021-01-06 05:21

    using Find like below is useful as it

    • can find the last (or first) cell in a 2D range immediately
    • testing for Nothing identifies a blank range
    • will work on a range that may not be contiguous (ie a SpecialCells range)

    change "YourSheet" to the name of the sheet you are searching

    Sub Method2()
        Dim ws As Worksheet
        Dim rng1 As Range
        Set ws = Sheets("YourSheet")
        Set rng1 = ws.Columns("A:B").Find("*", ws.[a1], xlValues, , xlByRows, xlPrevious)
        If Not rng1 Is Nothing Then
            MsgBox "last cell is " & rng1.Address(0, 0)
        Else
            MsgBox ws.Name & " columns A:B are empty", vbCritical
        End If
    End Sub
    
    0 讨论(0)
  • 2021-01-06 05:22

    You can try several ways:

    Using xlUp

    Dim WS As Worksheet
    Dim LastCellA As Range, LastCellB As Range
    Dim LastCellRowNumber As Long
    
    Set WS = Worksheets("Sheet1")
    With WS
        Set LastCellA = .Cells(.Rows.Count, "A").End(xlUp)
        Set LastCellB = .Cells(.Rows.Count, "B").End(xlUp)
        LastCellRowNumber = Application.WorksheetFunction.Max(LastCellA.Row, LastCellB.Row)
    End With
    

    Using SpecialCells

    Dim WS As Worksheet
    Dim LastCell As Range
    Set LastCell = Range("A:B").SpecialCells(xlCellTypeLastCell)
    

    The latter can sometimes be tricky and might not work as you wanted it to.

    More tips

    You can also have a look at Chip Pearson's page about this issue

    0 讨论(0)
  • 2021-01-06 05:26

    For a variable selection you can use

    Sub test()
        Dim arrArray As Variant
        Dim iAct As Integer
        Dim iHighest As Integer
        arrArray = Split(Selection.Address(1, 1, xlR1C1), ":")
        For Count = Right(arrArray(0), 1) To Right(arrArray(1), 1)
            iAct = ActiveSheet.Cells(Rows.Count, Count).End(xlUp).Row
            If iAct > iHighest Then iHighest = iAct
        Next Count
        MsgBox iHighest
    End Sub
    
    0 讨论(0)
提交回复
热议问题