12、[VBA入門到放棄筆記] Usedrange屬性


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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM