日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Excel 2010 VBA 入门 040 批量删除空行

發布時間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Excel 2010 VBA 入门 040 批量删除空行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

示例:

實現代碼1:

單元格刪除Delete方法

單元格刪除的通用算法

實現代碼2

利用Union獲取整個單元格區域進行統一操作

Union方法的注意事項

單元格插入Insert方法


示例:

? ? 如圖所示,該表為某公司入庫流水賬,由于工作人員疏忽,在記錄中產生了許多空行。現在需要做統計,希望能夠將這些空行批量刪除,該如何用VBA實現?

日期/時間產品數量
2012/10/29產品183
2012/10/30產品1184
???
2012/11/1產品346
2012/11/2產品397
2012/11/3產品184
2012/11/4產品147
???
???
2012/11/7產品3187
2012/11/8產品184
2012/11/9產品2105
2012/11/10產品2128
???
2012/11/12產品33
2012/11/13產品3141
2012/11/14產品2145
2012/11/15產品2194
2012/11/16產品1174
2012/11/17產品217
???
2012/11/19產品3151
2012/11/20產品1115
2012/11/21產品2187
2012/11/22產品2190
2012/11/23產品1166
2012/11/24產品242
2012/11/25產品1133
2012/11/26產品1188
2012/11/27產品276
2012/11/28產品3172
2012/11/29產品320
2012/11/30產品223
2012/12/1產品244
2012/12/2產品1159
2012/12/3產品156

實現代碼1:

Option ExplicitSub 批量刪除空行1()Dim RowN As LongFor RowN = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1If WorksheetFunction.CountA(Intersect(Rows(RowN), Columns("A:C"))) = 0 ThenRows(RowN).Delete shift:=xlShiftUpEnd IfNext End Sub

單元格刪除Delete方法

單元格刪除需要執行Delete方法,其語法為

Rng.Delete (Shift)

? ? 其中,Rng為所需刪除的單元格。可選參數Shift可以為xIShiftToLeft(刪除后右側單元格左移)或xIShiftUp(刪除后下方單元格上移)。當省略該參數時,Excel將根據Rng所表示的單元格形狀進行判斷。實質上,刪除整行時,默認為xIShiftUp。

單元格刪除的通用算法

? ? 批量刪除行時,所執行的循環必須按照從下往上的順序進行循環。如本例中,若按照從第2行至最后一行循環的順序進行,將會發生以下情況:
? ? 當RowN為8時,程序判斷為空行,執行刪除操作后,第8行以下所有的行均上移一行。進入下一次循環時,RowN為9時,由于原先的空行(第9行)將會變為第8行(如圖所示),程序將不再進行判斷。因而該方法會導致空行刪除不徹底,開發者應避免此類錯誤的發生。

實現代碼2

Sub 批量刪除空行2()Dim RowN As LongDim Rng As RangeFor RowN = 2 To Cells(Rows.Count, "A").End(xlUp).RowIf WorksheetFunction.CountA(Intersect(Rows(RowN), Columns("A:C"))) = 0 ThenIf Rng Is Nothing Then'若Rng未賦值,則設置Rng為當前行Set Rng = Rows(RowN)Else'若Rng已賦值,則設置Rng為當前行與原Rng的合并區域Set Rng = Union(Rng, Rows(RowN))End IfEnd IfNext'若空行存在,則刪除If Not Rng Is Nothing Then Rng.Delete shift:=xlShiftUpEnd Sub

利用Union獲取整個單元格區域進行統一操作

? ? 本解決方案是單元格批量操作經常使用的手段:利用1個變量Rng表示所有需要處理的單元格的集合,然后利用Union方法不斷將滿足條件的單元格添加到該集合中來。

Union方法的注意事項

? ? 在使用Union方法時需注意,由于Rng初始值為Nothing,若參數也為Nothing,將產生如圖所示的運行時錯誤。為避免該錯誤的發生,應對Rng對象進行判斷,若其為Nothing,就應直接賦值,而不使用Union方法。

單元格插入Insert方法

與刪除方法對應的是單元格插入Insert方法,其語法為

Rng.Insert (Shift,Copyorigin)

? ? 其中,Rng為單元格對象,該單元格對象指定了插入單元格的位置和大小,當執行插入操作后,將會在Rng所表示的單元格或單元格區域的相同位置插入相同大小的空白單元格。
? ? 參數Shift表示Rng所表示的單元格對象在插入新單元格后的移動方向,可以為xIShiftToRight(活動單元格右移)或者xIShiftDown(活動單元格下移)。
? ? CopyOrigin表示插入的單元格的格式設置,可以為xlFormatFromRightOrBelow,表示新單元格格式與Rng所表示的單元格區域最下行的下一行或最右列右一列的格式相同,或者xIFormatFromLef tOrAbove,表示新單元格格式與Rng所表示的單元格最上行的上一行或最左列的左一列格式相同。
?

?

?

總結

以上是生活随笔為你收集整理的Excel 2010 VBA 入门 040 批量删除空行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。