《VBA代碼解決方案》(版權10028096)這套教程是我最早推出的教程,目前已經是第三版修訂了。這套教程定位于入門后的提高,在學習這套教程過程中,側重點是要理解及掌握我的“積木編程”思想。要靈活運用教程中的實例像搭積木一樣把自己喜歡的代碼擺好。
這套教程共三冊,一百四十七講,內容覆蓋較廣,也是初級和中級間的過渡教程,改版后的內容主要是提供程序源碼文件及代碼修正為32位和64位兼用代碼。今后一段時間會給大家陸續推出。今日的內容是VBA代碼解決方案第二十三講 EXCEL中,如何刪除工作表中的空白行
【分享成果,隨喜正能量】99 萬物皆有靈,草木亦有心。這世間,萬事萬物都是有回音的,大至一世界,小至一微粒,你拿出十分的善意,定會收到它以一百分的溫柔回饋。。
第二十三講 EXCEL中,如何刪除工作表中的空白行
今日講解VBA代碼解決方案之二十三,EXCEL中,如何刪除工作表中的空白行,這里要首先講解的是Range對象的Delete方法,此方法用于刪除對象。
語法:expression.Delete(Shift)
參數
a) expression是必需的,返回一個Range對象。
b) Shift是可選的,指定刪除單元格時替補單元格的移位方式。可為以下 XlDeleteShiftDirection常量之一:xlShiftToLeft或xlShiftUp。如果省略該參數,則Microsoft Excel將根據區域的圖形決定移位方式。
1 利用Range對象的Delete方法刪除空白行的代碼
下面我們將就實際的應用來講解如何應用DELETE方法,這個方法也是VBA中應用中的非常廣泛的。可以用于VALUE的刪除,也可以用于格式的刪除,還可以用于行的刪除等等,今日講解的就是行的刪除。要根據具體的條件來選擇刪除的對象,這就要根據實際問題的來做具體的判斷,這里我要講解的是“如何刪除空白行”,這個問題。這個問題也是在實際工作中應用的最為廣泛的方法。下面我們看代碼:
Sub mynz_23() '第23講 EXCEL中,如何刪除工作表中的空白行
Dim rRow As Long
Dim LRow As Long
Dim i As Long
rRow = Sheets("23").UsedRange.Row '首行
LRow = rRow + Sheets("23").UsedRange.Rows.Count - 1 '尾行
For i = LRow To rRow Step -1
If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
Rows(i).Delete
End If
Next
End Sub
代碼窗口:
2 實例代碼的解讀及運行結果
代碼解析:mynz_23過程刪除工作表中已使用的區域的所有空行。
1) 第5行代碼獲得工作表中已使用區域的首行行號,其中使用UsedRange屬性返回工作表中已使用的區域。
2) 第6行代碼獲得工作表中已使用區域的最后一行行號。
3) 第7行到第11行代碼從最大行數至最小行數循環判斷指定行是否為空行,若為空行則刪除該行。
4) 其中第8、9行代碼使用工作表CountA函數判斷當前行已使用單元格的數量,如果為零說明此行是空行則使用Delete刪除。
5) UsedRange屬性應用于Worksheet對象,返回指定工作表中已使用區域的Range對象,即返回工作表中已使用的單元格區域。
6) WorksheetFunction.CountA 方法 用于計算非空單元格及參數列表中值的個數。
7) Application.WorksheetFunction.CountA(Rows(i)) 表示選中Rows(i)行的非空單元格的個數。
- UsedRange.Row表示已用單元格第一行的序數; UsedRange.Rows.Count表示已用單元格總的行數;
- 需要注意點是: 此處一定要從最大行數至最小行數開始循環判斷,因為如果工作表中存在兩行及兩行以上的相鄰空行,從最小行數開始循環刪除的話,當第一行空行被刪除后,被刪除行下面的一行會往上移位,而此時For...Next循環的計數器已經加1,所以會出現漏刪除的現象。
代碼的運行情況:
運行后的結果:
今日內容回向:
1 刪除工作表行數的思路是什么?
2 UsedRange.Row 意義是什么?
3 Application.WorksheetFunction.CountA(Rows(i)) 是什么意義?
本講內容參考程序文件:VBA代碼解決方案修訂(22-26).xlsm
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中: