首页 > 其他 > 详细

用VBA取得EXCEL有效行列数方法研究

时间:2014-05-14 15:02:19      阅读:654      评论:0      收藏:0      [点我收藏+]

作者:iamlaosong

我常用下面方式取得有效行数:

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

实际使用中发现这种方法存在2个问题:

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

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

2、当最后一行不为空时,用这个方法取不到正确的值。

下面说明用VBA得到EXCEL表格中的行数和列数的特点,以便根据需要选用

每种方法中上面的是Excel的行数,下面的是Excel的列数。
方法1:
  ActiveSheet.UsedRange.Rows.Count   
  ActiveSheet.UsedRange.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
      缺点:只能计算出一列(行)的最后一个单元格所在的行(列)数。当最后一行或者一列不为空时无法返回正确的结果,而且2007版以后,由于最大行列数增加,兼容性存在问题。本例是只返回A列最后一个单元格所占的行数。

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

方法4:
  ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
  ActiveSheet.UsedRange.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.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
  效果同方法2

以上方法中比较常用的是方法1和方法2。

用VBA取得EXCEL有效行列数方法研究,布布扣,bubuko.com

用VBA取得EXCEL有效行列数方法研究

原文:http://blog.csdn.net/iamlaosong/article/details/25682249

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!