標籤:

關於UsedRange屬性,你想要的都在這裡

UsedRange屬性是我們在VBA編程中經常用到的一個極為重要的屬性,下面介紹UsedRange屬性。

如果您想知道當前工作表中所有已使用的單元格區域的大小,或者您想引用當前工作表中已使用的區域,那麼您可能就要想到UsedRange屬性了。

UsedRange屬性應用於Worksheet對象,返回指定工作表中已使用區域的Range對象,即返回工作表中已使用的單元格區域。因此,該屬性也可以用於選取單元格區域。

下面用一個簡單的例子來說明UsedRange屬性的功能。

如下圖1所示的工作表:

圖1:一個帶有數據的工作表

然後,在VBE編輯器中輸入如下代碼:

Sub Sample01()

Worksheets("Sheet1").UsedRange.Select

End Sub

代碼運行後,上面的工作表顯示如下圖2所示:

圖2:代碼運行後的工作表

即在指定工作表中(本例為工作表Sheet1)已使用範圍被全部選中。可以看出,UsedRange屬性返回工作表中所有已使用範圍的單元格區域,而不管該區域數據間是否有空行或空格。

特別注意:UsedRange屬性返回工作表中所有已使用範圍的單元格區域是指:單元格中有數值、公式、單元格格式化設置(例如:單元格字體設置、邊框設置等等)

因為屬性usedrange包含著帶格式的、空白的單元格,所以只要有這樣的單元格,就會被統計上,因此,手動清除數據後(清除文字、背景色、合併單元格),還會有多出的行,只有徹底刪除之後才會正確統計。徹底清除語句:cells.clear。

?UsedRange屬性的一些常見用法:

妙用UsedRange對象可以獲得工作表的很多信息:

(1)已用單元格區域的第一行行序數:UsedRange.Row

(2)已用單元格區域的佔用的行數:UsedRange.Rows.Count

(3)已用單元格區域的最後一行的列序數: UsedRange .Row+ UsedRange. Rows.Count-1 (重要)

(4)已用單元格區域的第一列列序數:UsedRange.Column

(5)已用單元格區域的佔用的列數:UsedRange.Columns.Count 已用單元格區域的最後一列的列序數:UsedRange.Column+UsedRange.Columns.Count-1,UsedRange.Areas.Count>1除外(Areas(index)也返回的是Range對象)

(6)已用單元格區域的佔用的總單元格數:UsedRange.Cells.Count或 Me.UsedRange.Count,返回的只是「行數×列數」,所以無論內部有無合併單元格,此值不受影響。

(7)語句Activesheet.UsedRange.Address返回當前工作表已使用單元格區域的地址


?end(xlup).row與usedrange.row的探討

說到這裡,上面第三條已用單元格區域的最後一行的列序數: UsedRange .Row+ UsedRange. Rows.Count-1 ,我們平時時獲取已用單元格區域的最後一行的列序數一般都是用range("").end(xlup).row。

那麼這兩種方法的區別是什麼呢?

對於上圖

Sub s()

ss = Sheet1.UsedRange.Row + Sheet1.UsedRange.Rows.Count - 1

End Sub

Sub t()

tt= Sheet1.Range("a65536").End(xlUp).Row

End Sub

兩段代碼得到的最後一行的行數是一樣的。

但是,如果是下圖的情況,兩者就有區別。

ss =4,而 tt=9。

總結:對於確定某一列一定有該Sheet已用單元格區域的最後一行的話,用end(xlup).row與 UsedRange .Row+ UsedRange. Rows.Count-1都可以,但是如果Sheet中不確定是那一列有該Sheet已用單元格區域的最後一行,這個時候就只能用「 UsedRange .Row+ UsedRange. Rows.Count-1 」獲取已用單元格區域的最後一行的列序數。

這段話有點拗口,希望反覆斟酌理解。很有用處。

END

更多內容

歡迎關注微信公眾號「每天學點excelvba」(ID:todayvba)

帶你每日學習VBA,從枯燥機械的工作中解放雙手。

推薦閱讀:

VBA 如何把字元串轉換為可執行語句?
Excel、VBA與MySQL交互
EXCEL VBA小白第六課:豆瓣精選話題爬蟲數據分析小嘗試
Excel+VBA製作小遊戲:翻卡牌

TAG:VBA |