2014-01-07 26 views
0

我一直在努力T0使用VBA找到一個特定列的行數,查找的行數 - 法解釋

我發現,這是可以做到通過使用兩種方法,這三者涉及範圍(我幾乎找到了這個簡單的谷歌搜索,然後編輯我發現,以滿足我的需求)

然而,我覺得它會適合我更好,如果我瞭解他們每個人做了什麼,以及他們是如何不同其他

我使用的兩個代碼如下:

i = Application.CountA(Range("A:A")) 

lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 

誰能請解釋我如何這兩個工作,兩者有什麼區別?另外,如果你知道這是有效的任何其他方式,它會如果你在這裏分享它是有幫助的。

+2

http://stackoverflow.com/questions/11169445/error-finding-last-used-cell-in-vba –

+1

使用'CountA'會給你佔用的單元總數而不是最後一行。要找到最後一行,請使用第二行或如上面的鏈接所示。 –

回答

3
i = Application.CountA(Range("A:A")) 

這將返回列A中包含值的所有單元格的計數。它們不必連續處於單元格中。

lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 

這將進入A列底部的最後一個單元格,然後執行等同於按End鍵和上箭頭鍵。這將返回包含值的列中最後一個單元格的行索引。

+0

'這將選擇在包含value.' + 1次:)但是該列的最後一個單元格,它會'不SELECT'最後一個單元格,正如你所說:) –

+3

上面,而不是「選擇」,我會使用「返回「。以上兩種方法獲取並返回一個值,而不是移動,並積極改變選擇。 ;) – Manhattan

+0

良好的編輯......你打我吧。 :) – aphoria

2

使用Find優於

  • 不像xlUp迎合隱藏的單元格(而不是過濾掉細胞)
  • 避免了空白或不太可能列滿虛假報告。見here

查找方法

Sub GetLastA() 
Dim rng1 As Range 
Set rng1 = Columns("A:A").Find("*", [a1], xlFormulas) 
If Not rng1 Is Nothing Then 
    MsgBox "last row is " & rng1.Row 
Else 
    MsgBox "no used cells found", vbCritical 
End If 
End Sub 
+0

+1贊同'.Find'的優點! –