Usedrange屬性並不是單元格的屬性,它是工作表的屬性,是返回工作表中已經使用了的單元格區域。
Sub hy() ActiveSheet.UsedRange.Select End Sub

Paste_Image.png
- 怎么樣工作表中的單元格才算是使用了?如圖所示,設置了行高,就代表單元格使用過了,UsedRange就會跟着單元格使用的范圍越來越大,其他的操作如定義格式,設置背景顏色等等都會被認為使用過單元格。
- UsedRange和CurrentRegion類似,有時候兩個屬性返回的單元格區域也是一樣的。但要注意的是,兩者的意義並不一樣,返回的單元格區域要視實際情況而定。這里稍作提示,不多說。
- UsedRange在實際運用中主要用到的是UsedRange.Rows.Count,返回工作表中已使用單元格區域的行數。
例子:刪除工作表中的所有空行。先看下圖。

- 工作表中已使用的單元格區域是"$A$2:$F$16",工作表第1行並沒有使用,最后的使用行行號是16,在第一張圖片有木有看出來呢?
- 現在我們要刪除工作表中所有多余的空行,如果使用UsedRange.Rows.Count,是不能夠刪除第16行的空行。倒循環的時候,R=UsedRange.Rows.Count=15,並不是真正的最后的‘使用了的行’。
For i = R To 1 Step -1

Paste_Image.png
- 解決的方法是:
- 1、確定UsedRange的行數,如這里R=UsedRange.Rows.Count=15
- 2、確定確定UsedRange第一行的行號,使用UsedRange.Rows(1).Row
-
3、這里還需要注意的是,定義的變量R和RR都要為Long數據類型,因為Integer(-32768~32767)的范圍太小,而07版excel有100多萬行,遠遠超過了Integer的支持范圍,這問題實際使用中常常發生出錯。實際當中,定義為Long類型也比Integer類型效率要高。
LastRow = R + RR - 1 '行數+首行行號-1
'LastRow=15+2-1=16,通過這樣計算,最終確定刪除工作表中單元格區域的最后行號
Sub 刪除所有空行() Dim R As Long, RR As Long, i As Long, Counter As Long Dim LastRow As Long '真正最后使用過的單元格行號 R = ActiveSheet.UsedRange.Rows.Count '使用過的行數 RR = ActiveSheet.UsedRange.Rows(1).Row '使用過的單元格區域首行行號 LastRow = R + RR - 1 Application.ScreenUpdating = False '關閉屏幕刷新 For i = LastRow To 1 Step -1 If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then '如果是空行,那么 Rows(i).Delete '刪除 Counter = Counter + 1 '計算空行數量 End If Next i Application.ScreenUpdating = True '開啟屏幕刷新 MsgBox Counter & " 空行已刪除" End Sub

結果
作者:葉知行
鏈接:https://www.jianshu.com/p/e910dfdc9a96
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。