Excel:需要删除大约一百万个空白行

我有一个来自我们的客户的Excel文件,该文件有接近100万空白行。

我尝试过滤列C(称为项目),它是空白的,然后select所有行,并尝试删除。 它几乎冻结了将近几个小时,但最后我杀了Excel的过程。

我也在VBA脚本下面试过,但是实际上它写着“r.rows(i).Delete”的那一行就冻结了。 这是第一个删除实例本身。

我也将Excel文件设置为手动进行公式计算。

我不介意整个工作需要几个小时。 我可以一夜之间离开,并在早上检查。

如果有什么与VB.NET或C#也没关系。

更新1:我不能做1到1048576行之间的批量删除,我需要删除C列为空的那些行(这意味着行是空白的)。

更新2:我标记下面的删除作为答案,但我最终通过将GOOD行复制到另一个工作表来解决此问题。

请build议处理这种情况的最佳select。

VBA源

Sub BlankRowDelete() Dim r As Range, rows As Long, i As Long Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.Calculation = xlCalculationManual Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False ActiveSheet.AutoFilterMode = False Set r = ActiveSheet.Range("A1:A1048576") rows = r.rows.Count For i = rows To 1 Step (-1) If WorksheetFunction.CountA(r.rows(i)) = 0 Then r.rows(i).Delete RowDeleted = RowDeleted + 1 Else NotDeleted = NotDeleted + 1 End If totalcnt = totalcnt + 1 If RowDeleted = 100 Then TotalDeleted = TotalDeleted + RowDeleted RowDeleted = 0 Debug.Print "count now is " + totalcnt End If Application.StatusBar = "Row count is " + totalcnt Next Application.ScreenUpdating = False Application.DisplayStatusBar = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True ActiveSheet.DisplayPageBreaks = True ActiveSheet.AutoFilterMode = True 

结束小组

我对你的代码进行了一些更新,例如doevents,打开状态栏,因为oyu正在写入它,并在需要时更新屏幕,当你写出一个数值时添加cstr()。 我跑这没有问题。 如注释中所述,这只会删除单元格A而不是整行

 Sub BlankRowDelete() On Error GoTo myError Dim r As Range, rows As Long, i As Long Application.ScreenUpdating = False Application.DisplayStatusBar = True Application.Calculation = xlCalculationManual Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False ActiveSheet.AutoFilterMode = False Set r = ActiveSheet.Range("C1:C1048576") rows = r.rows.Count For i = rows To 1 Step (-1) If WorksheetFunction.CountA(r.rows(i)) = 0 Then r.rows(i).EntireRow.Delete RowDeleted = RowDeleted + 1 Else NotDeleted = NotDeleted + 1 End If totalcnt = totalcnt + 1 If RowDeleted = 100 Then Application.ScreenUpdating = True TotalDeleted = TotalDeleted + RowDeleted RowDeleted = 0 'you can uncomment this but since this is a dup since writting to statusbar (imo) 'Debug.Print "count now is " + CStr(totalcnt) Application.ScreenUpdating = False End If Application.StatusBar = "Row count is " + CStr(totalcnt) DoEvents Next myError: If Err.Number <> 0 Then MsgBox CStr(i) & ": " & Err.Description End If Application.ScreenUpdating = False Application.DisplayStatusBar = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True ActiveSheet.DisplayPageBreaks = True ActiveSheet.AutoFilterMode = True End Sub 

按C列升序排列文件。 空白行将结束,所以删除它们应该很容易。