關於UsedRange屬性,你想要的都在這裡
UsedRange屬性是我們在VBA編程中經常用到的一個極為重要的屬性,下面介紹UsedRange屬性。
如果您想知道當前工作表中所有已使用的單元格區域的大小,或者您想引用當前工作表中已使用的區域,那麼您可能就要想到UsedRange屬性了。
UsedRange屬性應用於Worksheet對象,返回指定工作表中已使用區域的Range對象,即返回工作表中已使用的單元格區域。因此,該屬性也可以用於選取單元格區域。
下面用一個簡單的例子來說明UsedRange屬性的功能。
如下圖1所示的工作表:
圖1:一個帶有數據的工作表
然後,在VBE編輯器中輸入如下代碼:
Sub Sample01()
Worksheets("Sheet1").UsedRange.SelectEnd 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 - 1End Sub
Sub t()
tt= Sheet1.Range("a65536").End(xlUp).RowEnd 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 |