- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VBA探讨在工作表中找到最后一行
[VBA]探讨在工作表中找到最后一行??
2007-11-07 17:58:43|??分类: excel教程 |??标签: |字号大中小?订阅
找到最后一行的一些方法探讨
使用End属性
在ExcelVBA中,使用End(xlUp)查找最后一行是最常使用且最为简单的方法,它假设要有一列总包含有数据(数字、文本和公式等),并且在该列中最后输入数据的单元格的下一行不会包含数据,因此不必担心会覆盖掉已有数据。但该方法有两个缺点:
(1) 仅局限于查找指定列的最后一行。
(2) 如果该列中最后一行被隐藏,那么该隐藏行将被视作最后一行。因此,在最后一行被隐藏时,其数据可能会被覆盖。但该列中间的隐藏行不会影响查找的结果。
[示例代码01]
Sub EndxlUp_OneColLastRow()
? If Range(A Rows.Count).End(xlUp) = Empty Then GoTo Finish
? 获取最后一行
? MsgBox 最后一行是第 Range(A Rows.Count).End(xlUp).Row “行.”
? Exit Sub
Finish:
? MsgBox 没有发现公式或数据!
End Sub
[示例代码02]
Sub NextRowInColumnUsedAsSub()
包含所有数据和公式,忽略隐藏的最后一行
? Range(A Range(A Rows.Count).End(xlUp).Row + 1).Select
End Sub
[示例代码03]
Sub NextRowInColumnUsedAsFunction()
包含所有数据和公式,忽略隐藏的最后一行
? Range(A LastRowInColumn(A) + 1).Select
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - -
Public Function LastRowInColumn(Column As String) As Long
???? LastRowInColumn = Range(Column Rows.Count).End(xlUp).Row
End Function
注意,要输入新数据的列可能与我们所查找最后一行时所使用的列不同,例如,在上例中,我们可以修改为在B列中查找该列的最后一行,而在A列相应行的下一行中输入新的数据。
?
使用Find方法
vba常量:
LookIn:=xlValues,按值查找
LookAt:=xlWhole,全部匹配,xlPart部分匹配
SearchOrder:=xlByRows,按行查找
SearchDirection:=xlNext,查找方向,向下查找
Find方法在当前工作有数据中进行查找,不需要指定列,也可以确保不会意外地覆盖掉已有数据。其中,参数LookIn指定所查找的类型,有三个常量可供选择,即xlValues、xlFormulas和xlComments。
(1) 常量xlFormulas将包含零值的单元格作为有数据的单元格。(当设置零值不显示时,该单元格看起来为空,但该参数仍将该单元格视为有数据的单元格)
(2) 常量xlValues将包含零值的单元格(如果设置零值不显示时)作为空白单元格,此时,若该单元格在最后一行,则Find方法会认为该单元格所在的行为空行,因此,该单元格中的内容可能会被新数据所覆盖。
[注:在Excel中,选择菜单“工具”——“选项”,在打开的“选项”对话框中,选择“视图”选项卡,将其中的“零值”前的复选框取消选中,则工作表中的零值都不会显示]
如果在参数LookIn中使用常量xlValues的话,还存在一个问题是:如果您将最后一行隐藏,则Find方法会认为倒数第二行是最后一行,此时您在最后一行的下一行输入数据,则会将实际的最后一行的数据覆盖。
您可以在隐藏最后一行与不隐藏最后一行,或者是最后一行显示零值与不显示零值时,运行下面的示例代码04,看看所得的结果有什么不同。
[示例代码04]
Sub Find_LastRowxlValues()
?? On Error GoTo Finish
?? 获取最后一行
?? MsgBox 最后一行是第 Cells.Find(*, _
?? SearchOrder:=xlByRows, LookIn:=xlValues, _
?? SearchDirection:=xlPrevious).EntireRow.Row “行”
?? Exit Sub
Finish:
?? MsgBox 没有发现数值!
End Sub
因此,在使用Find方法时,您应该考虑所选参数设置的常量,以及工作表最后一行是否有可能被隐藏或不显示零值。
文档评论(0)