天天看點

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

作者:iamlaosong

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

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

實際使用中發現這種方法存在2個問題:

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

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

2、當最後一行不為空時,用這個方法取不到正确的值。

每種方法中上面的是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。