vba程序中,如何返回最后一列不为空

vba程序中,如何返回最后一列不为空的列的列号[Microsoft Excel精英论坛]

Nextcol=Cells(1,255).End(xlToLeft).Column
'取从cells(1,255)向左查找到的第一个非空值单元格的列数,不含cells(1,255),与连续与否无关,没查到时返回第一列列号

cells(1,columns.count).end(xltoleft).column 返回第一列列号

Nextcol=Cells(1,1).End(xlToright).Column
'取从cells(1,1)向右查找到的第一个非空值单元格的列数,不含cells(1,1),与连续与否无关,没查到时返回最后一列列号

Nextcol=Cells(65536,1).End(xlup).row
'取从cells(65536,1)向上查找到的第一个非空值单元格的行数,不含cells(65536,1),与连续与否无关,没查到时返回第一行行号

Nextcol=Cells(1,1).End(xldown).row
'取从cells(1,1)向下查找到的第一个非空值单元格的行数,不含cells(1,1),与连续与否无关,没查到时返回最后一行行号

上面的方法不能判断隐藏行(如果最后几行隐藏会被漏过)



**********************************************************************************************

用VBA得到EXCEL表格中的行数和列数
编程总结
每种方法中上面的是Excel的行数,下面的是Excel的列数。
方法1:
https://www.360docs.net/doc/7d6402311.html,edRange.Rows.Count
https://www.360docs.net/doc/7d6402311.html,edRange.Columns.Count
缺点:有时可能会比实际数大一些,原因是如果你把最后几行(列)数据清除后(非整行或整列删除),用这个命令仍返回未清除前的值。就是说现在虽然是空的,但是你曾经用过也算你的。

方法2:
ActiveSheet.Range("A65535").End(xlUp).Row
ActiveSheet.Range("IV1").End(xlToLeft).Column
可以简写为:
ActiveSheet.[A65536].End(xlUp).Row
ActiveSheet.[IV1].End(xlToLeft).Column
缺点:只能计算出一列(行)的最后一个单元格所在的行(列)数。本例是只返回A列最后一个单元格所占的行数。

方法3:
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
缺点:在工作表进行对删除或清除操作时也会变得比实际情况大。

方法4:
https://www.360docs.net/doc/7d6402311.html,edRange.SpecialCells(xlCellTypeLastCell).Row
https://www.360docs.net/doc/7d6402311.html,edRange.SpecialCells(xlCellTypeLastCell).Column
缺点:在工作表进行对删除或清除操作时也会变得比实际情况大。

方法5:
Application.CountA(ActiveSheet.Range("A:A"))
Application.CountA(ActiveSheet.Range("1:1"))
只能统计一列(行)的实际使用情况,得到的不一定是最后一行(列)的位置。方法2的数值比此方法大时,说明在A列的数据间有空白未填写的单元格。

方法6:
ActiveSheet.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
ActiveSheet.Cell

s.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
效果同方法2,但可以查找隐藏行

以上方法中比较常用的是方法1和方法2。
方法六原为:
ActiveSheet.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
ActiveSheet.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

改为如下即可:
ActiveSheet.Range("a:a").Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
ActiveSheet.Range("1:1").Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).column
有图可证:

相关文档
最新文档