36

如何确定 Excel 工作表中的最后一行,包括中间的一些空白行?

使用此功能:

Function ultimaFilaBlanco(col As String) As Long        
        Dim lastRow As Long
        With ActiveSheet
            lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, col).End(xlUp).row
        End With            
        ultimaFilaBlanco = lastRow          
End Function

而这个数据:

Row 1 : Value
Row 2 : Value
Row 3 : Value
Row 4 : Value
Row 5 : Value
Row 6 : White
Row 7 : Value
Row 8 : Value
Row 9 : Value
Row 10  : White
Row 11  : White
Row 12  : White
Row 13  : Value
Row 14  : White

该函数返回 5,我需要 13。知道该怎么做吗?

4

11 回答 11

59

获取使用的最后一行数的最佳方法是:

ActiveSheet.UsedRange.Rows.Count对于当前工作表

Worksheets("Sheet name").UsedRange.Rows.Count对于特定的工作表

要获取使用的最后一列的编号:

ActiveSheet.UsedRange.Columns.Count对于当前工作表

Worksheets("Sheet name").UsedRange.Columns.Count对于特定的工作表

我希望这有帮助。

阿卜杜

于 2013-06-12T14:19:29.413 回答
26
ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row -1

短的。安全的。快速地。即使工作表顶部或其他任何地方有空行,也会返回最后一个非空行。也适用于空工作表(Excel 报告在空工作表上使用了 1 行,因此表达式将为 1)。在 Excel 2002 和 Excel 2010 上测试和工作。

于 2013-12-23T14:30:56.973 回答
18

我使用以下内容:

lastrow = ActiveSheet.Columns("A").Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row

它会在特定列中找到最后一行。如果您想要任何列的最后使用行,则:

lastrow = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row
于 2012-12-03T17:24:18.060 回答
15

你真的很亲近。尝试使用大行号End(xlUp)

Function ultimaFilaBlanco(col As String) As Long

        Dim lastRow As Long
        With ActiveSheet
            lastRow = ActiveSheet.Cells(1048576, col).End(xlUp).row
        End With

        ultimaFilaBlanco = lastRow

End Function
于 2012-12-03T16:18:57.577 回答
4
LastRow = ActiveSheet.UsedRange.Rows.Count
于 2012-12-03T16:19:07.700 回答
3

问题是您的函数中的“作为字符串”。将其替换为“as double”或“as long”以使其工作。如果最后一行大于接受的答案中提出的“大数字”,它甚至可以工作。

所以这应该有效

Function ultimaFilaBlanco(col As double) As Long        
    Dim lastRow As Long
    With ActiveSheet
        lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, col).End(xlUp).row
    End With            
    ultimaFilaBlanco = lastRow          
End Function
于 2013-06-14T12:03:43.927 回答
3

如果工作表顶部包含未使用区域,UsedRange.Rows.Count则不是最大行。

这是正确的最大行数。

maxrow = Sheets("..name..").UsedRange.Rows(Sheets("..name..").UsedRange.Rows.Count).Row
于 2018-06-21T05:26:43.230 回答
1

除了所有提到的方法之外,还有其他几种方法可以找到工作表或指定范围中的最后一行或最后一列。

Function FindingLastRow(col As String) As Long

  'PURPOSE: Various ways to find the last row in a column or a range
  'ASSUMPTION: col is passed as column header name in string data type i.e. "B", "AZ" etc.

   Dim wks As Worksheet
   Dim lstRow As Long

   Set wks = ThisWorkbook.Worksheets("Sheet1") 'Please change the sheet name
   'Set wks = ActiveSheet   'or for your problem uncomment this line

   'Method #1: By Finding Last used cell in the worksheet
   lstRow = wks.Range("A1").SpecialCells(xlCellTypeLastCell).Row

   'Method #2: Using Table Range
   lstRow = wks.ListObjects("Table1").Range.Rows.Count

   'Method #3 : Manual way of selecting last Row : Ctrl + Shift + End
   lstRow = wks.Cells(wks.Rows.Count, col).End(xlUp).Row

   'Method #4: By using UsedRange
   wks.UsedRange 'Refresh UsedRange
   lstRow = wks.UsedRange.Rows(wks.UsedRange.Rows.Count).Row

   'Method #5: Using Named Range
   lstRow = wks.Range("MyNamedRange").Rows.Count

   'Method #6: Ctrl + Shift + Down (Range should be the first cell in data set)
   lstRow = wks.Range("A1").CurrentRegion.Rows.Count

   'Method #7: Using Range.Find method
   lstRow = wks.Column(col).Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row

   FindingLastRow = lstRow

End Function

注意:请仅使用上述方法之一,因为它可以证明您的问题陈述。

请注意Find 方法看不到单元格格式,而只有数据,因此如果只有数据重要而不是格式,则查找 xlCellTypeLastCell。此外,合并单元格(必须避免)可能会给您带来意想不到的结果,因为它会给您第一个单元格的行号,而不是合并单元格中的最后一个单元格。

于 2017-08-05T17:23:20.050 回答
1
ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.count).row

ActiveSheet 可以替换为WorkSheets(1)WorkSheets("name here")

于 2018-01-29T21:48:48.953 回答
-1

这是我在第一行“A”中查找下一个空行的代码。要将其用于任何其他行,只需更改单元格(i、2 或 3 或 4 等等)

Sheets("Sheeet1").Select
   for i=1 to 5000
        if cells(i,1)="" then nextEmpty=i goto 20
   next i
20 'continue your code here 

enter code here
于 2015-09-14T08:51:23.157 回答
-2

更好的:

if cells(i,1)="" then 
nextEmpty=i: 
exit for
于 2017-12-12T13:43:37.377 回答