如何知道最后一行填写VBA(Excel)?

我有一个工作表调用“重述”,我想知道我有多less行这张表。我试着用这个代码:

Function FindingLastRow(Mysheet As String) As Long Dim sht As Worksheet Dim LastRow As Long Set sht = ThisWorkbook.Worksheets(Mysheet) LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row FindingLastRow = LastRow End Function 

……

在我的macros我试过这个:

….

 Dim lastR As Long lastR=FindingLastRow("Recap") msgBox lastR 

…..

你传递一个string到你的FindingLastRow函数中,但是没有使用它。 shiit是被传入的参数,但是你稍后尝试使用称为Mysheet的东西。

 Function FindingLastRow(Optional MySheet As String, Optional sCOL as String = "A") As Long Dim sht As Worksheet Dim LastRow As Long If Not CBool(Len(MySheet)) Then MySheet = ActiveSheet.Name Set sht = ThisWorkbook.Worksheets(MySheet) LastRow = sht.Cells(sht.Rows.Count, sCOL).End(xlUp).Row FindingLastRow = LastRow Set sht = nothing End Function Sub test_FindingLastRow() Dim lastR As Long lastR = FindingLastRow MsgBox lastR lastR = FindingLastRow("Recap") MsgBox lastR lastR = FindingLastRow("Recap", "B") MsgBox lastR End Sub 

如果没有传入工作表名称,则使用当前ActiveSheet的名称。 如果没有传入字母列名,将使用列A.

如果您想查找除ThisWorkbook以外的书中的最后一个单元格:

 Function FindingLastRow( _ ByVal shtName As String, _ Optional ByVal colLetter As Variant, _ Optional ByRef wkBk As Variant _ ) As Long Dim colId As String If IsMissing(colLetter) Then colId = "A" Else colId = colLetter End If Dim myTargBk As Excel.Workbook If IsMissing(wkBk) Then Set myTargBk = ThisWorkbook Else Set myTargBk = wkBk End If Dim sht As Worksheet Set sht = myTargBk.Worksheets(shtName) With sht FindingLastRow = .Cells(.Rows.Count, colId).End(Excel.xlUp).Row End With End Function 

像这样使用:

 Sub findLast() MsgBox FindingLastRow("Sheet1") End Sub 

或者在另一个打开的工作簿中查找列A的最后一行…

 Sub findLast2() Dim w As Excel.Workbook Set w = Excel.Workbooks("Norf.xlsx") MsgBox FindingLastRow("Sheet1", , w) End Sub 

或者在另一个打开的工作簿中查找列B的最后一行…

 Sub findLast3() Dim w As Excel.Workbook Set w = Excel.Workbooks("Norf.xlsx") MsgBox FindingLastRow("Sheet1", "B", w) End Sub 

你也假定最后一个单元格将在列A中,可能并非如此,所以我倾向于恢复到这样的状态:

 Function FindingLastRow(sheetName As String) As Long FindingLastRow = Sheets("sheetName").Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row End Function 

Worksheetvariables的UsedRange在这里非常有帮助。 你真的不需要一个UDF来获得行数。

 LastRow = Worksheets("Recap").UsedRange.Rows.Count 

此方法仅适用于数据从第1行开始并且工作表没有格式化数据之外的情况。 你可以在开始行+ UsedRange.Cells(1,1).Row如果你知道数据从第一行开始的地方。第二个问题阻止使用UsedRange。