Excel VBA获取最后一行列

本文介绍四种在Excel VBA中获取工作表最后一行的不同方法,并对比它们的特点及适用场景。方法包括使用End(xlUp)、UsedRange、Cells.Find和SpecialCells,每种方法都有其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试excel文件:

 

 

VBA代码:

Function getLastRow()

    Debug.Print "End(xlUp):" & Sheets(1).[A65536].End(xlUp).Row

    Debug.Print "usedRange:" & ActiveSheet.UsedRange.Rows.Count

    Debug.Print "find * :" & ActiveSheet.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    Debug.Print "xlCellTypeLastCell: " & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

End Function

 

 

 

运行结果:

End(xlUp):9

usedRange:16

find * :10

xlCellTypeLastCell: 16

 

结论(几种方式的比较):

方法1ActiveSheet.Range("A65535").End(xlUp).Row

1. 只能取得对应列的最后一行(本例是A列)。

2. 高低版本不兼容,2007版最大行数增加以后,就不能用65536了,而要用1048576

可以先判断再决定用哪个数字,即用下列语句代替原来的一句,假定文件名变量为rptfile

        If Right(rptfile, 3) = "xls" Then

            maxrow = [A65536].End(xlUp).Row

        Else

            maxrow = [A1048576].End(xlUp).Row

        End If

 

方法2ActiveSheet.UsedRange.Rows.Count

1. 即使行仅仅设置了格式,没有内容,也被算成最后一行。

2. 在工作表进行对删除或清除操作时也会变得比实际情况大。

 

方法3ActiveSheet.Cells.Find

1. 只计算有内容的行,没有格式的行不计算。

 

方法4ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

   效果同方法2

  

 

获取最后一行/列代码示例:

Function getLastRow()

    Debug.Print "End(xlUp):" & Sheets(1).[A65536].End(xlUp).Row

    Debug.Print "usedRange:" & ActiveSheet.UsedRange.Rows.Count

    Debug.Print "find * :" & ActiveSheet.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    Debug.Print "xlCellTypeLastCell: " & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

End Function

 

Function getLastCol()

    Debug.Print "End(xlToLeft):" & ActiveSheet.Range("IV1").End(xlToLeft).Column

    Debug.Print "usedRange:" & ActiveSheet.UsedRange.Columns.Count

    Debug.Print "find * :" & ActiveSheet.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

    Debug.Print "xlCellTypeLastCell: " & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column

End Function

VBA(Visual Basic for Applications)中,获取Excel最后一行是一个常见的需求,特别是在处理动态数据时。以下是几种常用的方法来实现这一目标: ### 方法一:使用 `End(xlUp)` 属性 ```vba Sub GetLastRow() Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Sheets("Sheet1") ' 假设数据在A lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row MsgBox "最后一行是: " & lastRow End Sub ``` ### 方法二:使用 `UsedRange` 属性 ```vba Sub GetLastRowUsingUsedRange() Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Sheets("Sheet1") lastRow = ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row MsgBox "最后一行是: " & lastRow End Sub ``` ### 方法三:使用 `Find` 方法 ```vba Sub GetLastRowUsingFind() Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Sheets("Sheet1") With ws.Columns("A") lastRow = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row End With MsgBox "最后一行是: " & lastRow End Sub ``` ### 解释 1. **方法一**:`End(xlUp)` 类似于在Excel中按 `Ctrl + ↑` 键。它会从表格的最后一行开始向上查找,找到第一个非空单元格。 2. **方法二**:`UsedRange` 返回工作表中已使用的区域。通过获取该区域的最后一行,可以确定数据的最后一行。 3. **方法三**:`Find` 方法用于查找指定范围内的最后一个非空单元格。 这些方法各有优缺点,选择哪种方法取决于具体的需求和数据结构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值