Better way to find last used row

前端 未结 8 1086
情歌与酒
情歌与酒 2020-11-22 15:32

I am trying to make this way of finding the last row as I found the last column:

Sheets(\"Sheet2\").Cells(1,Sheets(\"Sheet2\").Columns.Count).End(xlToLeft).C         


        
相关标签:
8条回答
  • 2020-11-22 15:57

    You should use a with statement to qualify both your Rows and Columns counts. This will prevent any errors while working with older pre 2007 and newer 2007 Excel Workbooks.

    Last Column

    With Sheets("Sheet2")
        .Cells(1, .Columns.Count).End(xlToLeft).Column
    End With 
    

    Last Row

    With Sheets("Sheet2")
        .Range("A" & .Rows.Count).End(xlUp).Row
    End With 
    

    Or

    With Sheets("Sheet2")
        .Cells(.Rows.Count, 1).End(xlUp).Row
    End With 
    
    0 讨论(0)
  • 2020-11-22 15:59

    How is this?

    dim rownum as integer
    dim colnum as integer
    dim lstrow as integer
    dim lstcol as integer
    dim r as range
    
    'finds the last row
    
    lastrow = ActiveSheet.UsedRange.Rows.Count
    
    'finds the last column
    
    lastcol = ActiveSheet.UsedRange.Columns.Count
    
    'sets the range
    
    set r = range(cells(rownum,colnum), cells(lstrow,lstcol))
    
    0 讨论(0)
  • 2020-11-22 16:03

    This function should do the trick if you want to specify a particular sheet. I took the solution from user6432984 and modified it to not throw any errors. I am using Excel 2016 so it may not work for older versions:

    Function findLastRow(ByVal inputSheet As Worksheet) As Integer
        findLastRow = inputSheet.cellS(inputSheet.Rows.Count, 1).End(xlUp).Row
    End Function
    

    This is the code to run if you are already working in the sheet you want to find the last row of:

    Dim lastRow as Integer
    lastRow = cellS(Rows.Count, 1).End(xlUp).Row
    
    0 讨论(0)
  • 2020-11-22 16:04

    This is the best way I've seen to find the last cell.

    MsgBox ActiveSheet.UsedRage.SpecialCells(xlCellTypeLastCell).Row
    

    One of the disadvantages to using this is that it's not always accurate. If you use it then delete the last few rows and use it again, it does not always update. Saving your workbook before using this seems to force it to update though.

    Using the next bit of code after updating the table (or refreshing the query that feeds the table) forces everything to update before finding the last row. But, it's been reported that it makes excel crash. Either way, calling this before trying to find the last row will ensure the table has finished updating first.

    Application.CalculateUntilAsyncQueriesDone
    

    Another way to get the last row for any given column, if you don't mind the overhead.

    Function GetLastRow(col, row)
        ' col and row are where we will start.
        ' We will find the last row for the given column.
        Do Until ActiveSheet.Cells(row, col) = ""
            row = row + 1
        Loop
        GetLastRow = row
    End Function
    
    0 讨论(0)
  • 2020-11-22 16:07

    I preferred search last blank cell:

    Il you want last empty cell of column you can do that

    Dim sh as Worksheet, r as range
    set sh = ActiveWorksheet 'if you want an other it's possible
    
    'find a value 
    'Columns("A:D") 'to check on multiple columns 
    Set r = sh.Columns("A").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
    'no value return first row
    If r Is Nothing Then Set r = sh.Cells(1, "A") Else Set r = sh1.Cells(r.Row + 1, "A")
    

    If this is to insert new row, find on multiple columns is a good choice because first column can contains less rows than next columns

    0 讨论(0)
  • 2020-11-22 16:11

    This gives you last used row in a specified column.

    Optionally you can specify worksheet, else it will takes active sheet.

    Function shtRowCount(colm As Integer, Optional ws As Worksheet) As Long
    
        If ws Is Nothing Then Set ws = ActiveSheet
    
        If ws.Cells(Rows.Count, colm) <> "" Then
            shtRowCount = ws.Cells(Rows.Count, colm).Row
            Exit Function
        End If
    
        shtRowCount = ws.Cells(Rows.Count, colm).Row
    
        If shtRowCount = 1 Then
            If ws.Cells(1, colm) = "" Then
                shtRowCount = 0
            Else
                shtRowCount = 1
            End If
        End If
    
    End Function
    
    Sub test()
    
        Dim lgLastRow As Long
        lgLastRow = shtRowCount(2) 'Column B
    
    End Sub
    
    0 讨论(0)
提交回复
热议问题