VBA找出一列中最后一个非空单元格

如图所示,需要返回最后一个非空单元格的地址,这个应该怎么做呢?请告诉我您的构思,有代码更好,我学习一下!

假设你要操作的列号是ColumnNo
那么该列最后一个非空单元格的行号是
Cells(65536, ColumnNo).End(xlUp).Row
有行号列号,搞定。

相当于手选该列最后一格,再按下END+UP 组合键.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-29
因为当中有空行,所以不能用投机方法,所以只能循环65536次
从第一行开始循环,如果非空,则记录下该行地址到任意一个单元格(比如取D2),然后再移到下一行
如果为空,则不记录,直接跳到一行
这样的话那个D2单元格就会不停地被覆盖,最后那个D2的数据就是最后一个非空单元格的地址

这个算法时间很长,期待有更好方法
第2个回答  2009-09-29
以A列举例:
Dim maxRow As Long
maxRow = Sheets("Sheet1").[A65535].End(xlUp).Row

以上就是获取的最后一个非空单元格的行号。无论中间有没有空行都不要紧,因为是从65535最大行开始往上找的(xlUp)。
第3个回答  2013-03-08
关于获取VBA最后一个非空值单元格的安全做法
1、比较常用的做法是:Range(“A65536″).End(xlUp).row。

2、这种做法的弊端,就是如果用户隐藏的单元格,或者是做了数据筛选,会出错。
3、正确的做法(考虑2003和2007兼容)如下:
Function GetEndNull() As Integer
Dim RowN As Long
Dim Rng As Range
Set Rng = Sheets(“XXX”).UsedRange
For RowN = Rng(Rng.Count).row To 1 Step -1
If Sheets(“XXX”).Cells(RowN, “A”) <> “” Then Exit For
Next
GetEndNull = RowN
End Function
研究了半天,这个会更安全一些
相似回答