Vba 使用自动筛选删除该行中有多个空白单元格的行

Vba 使用自动筛选删除该行中有多个空白单元格的行,vba,performance,excel,autofilter,Vba,Performance,Excel,Autofilter,我们有一个超过550000行的Excel文件,我的任务是“清理”这张工作表。此文件包含我们从不同供应商处获得的所有产品,以及随附的所有数据 我遇到的具体任务是如何删除列A和列B都为空的所有行 使用小得多的excel文件,可以很容易地通过以下方式完成: Dim j As Long, i As Long j = Cells(Rows.Count, "C").End(xlUp).Row For i = j To 1 Step -1 If Cells(i, "A") = "" And Cell

我们有一个超过550000行的Excel文件,我的任务是“清理”这张工作表。此文件包含我们从不同供应商处获得的所有产品,以及随附的所有数据

我遇到的具体任务是如何删除列A和列B都为空的所有行

使用小得多的excel文件,可以很容易地通过以下方式完成:

Dim j As Long, i As Long

j = Cells(Rows.Count, "C").End(xlUp).Row
For i = j To 1 Step -1
    If Cells(i, "A") = "" And Cells(i, "B") = "" Then
        Cells(i, "A").EntireRow.Delete
    End If
Next I
不幸的是,由于文件的大小太大,这样做不起作用

在此之前,我使用以下代码成功地删除了C列中具有空白单元格的所有行:

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

Dim oldWs As Worksheet, newWs As Worksheet
Dim wsName As String, lastRow As Range

Set oldWs = Worksheets(2)
wsName = oldWs.Name

lastRow = ActiveSheet.UsedRange.Rows.Count

If lastRow.Rows.Count > 1 Then
    Set newWs = Sheets.Add(After:=oldWs)
    With lastRow
        .AutoFilter Field:=3, Criteria1:="<>"
        .Copy
    End With
    With newWs.Cells
        .PasteSpecial xlPasteColumnWidths
        .PasteSpecial xlPasteAll
        .Cells(1, 1).Select
        .Cells(1, 1).Copy
    End With
    oldWs.Deletesheet
    newWs.Name = wsName
End If

Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdate=False
Application.EnableEvents=False
Application.Calculation=xlCalculationManual
将旧WS设置为工作表,将新WS设置为工作表
将wsName设置为字符串,将lastRow设置为范围
设置oldWs=工作表(2)
wsName=oldWs.Name
lastRow=ActiveSheet.UsedRange.Rows.Count
如果lastRow.Rows.Count>1,则
设置newWs=Sheets.Add(后面:=oldWs)
和拉斯特罗
.自动筛选字段:=3,标准1:=“”
复制
以
使用newWs.Cells
.Paste特殊XLPaste柱宽
.Paste特殊xlPasteAll
.单元格(1,1)。选择
.单元格(1,1)。复制
以
oldWs.Deletesheet
newWs.Name=wsName
如果结束
Application.ScreenUpdating=True
Application.EnableEvents=True
Application.Calculation=xlCalculationAutomatic
我一直在研究如何在多个列上使用.AutoFilter,但似乎没有什么能正常工作

任何加速第一个提到的过程的方法,允许输入多个字段。自动筛选,或者任何其他一般的方法都会有很大的帮助


p、 我看了几乎每一个相关的问题/答案,都找不到适合我的东西,但我觉得我越来越接近了

什么是
N
?你哪儿都不用

Dim j As Long, i As Long

j = Cells(Rows.Count, "C").End(xlUp).Row
For i = j To 1 Step -1
       If Range("A" & i).Value = vbNullString And Range("B" & i).Value = vbNullString Then Rows(i).Delete
Next i
应该行得通。请记住,处理500000行需要一段时间

您可以通过将

With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayAlerts = False
End With

开始时(并将所有内容放回
True
末尾)

这将帮助您“删除列A和列B均为空的所有行”


谢谢你发现了这一点,我已经重新命名了一些变量W,真的很简单。。非常感谢你!!你能解释一下包含小计(103)的那一行吗?不客气。它统计指定范围内可见(即未过滤)单元格的数量(在本例中为
.Columns(3)
,即引用范围的第三列)
Option Explicit

Sub main()
    With Worksheets("Products") ' change "Products" to your actual sheet name
        With .Range("A1", .Cells(.Rows.Count, "C").End(xlUp))
            .AutoFilter Field:=1, Criteria1:="="
            .AutoFilter Field:=2, Criteria1:="="
            MsgBox .Address
            If Application.WorksheetFunction.Subtotal(103, .Columns(3)) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        End With
        .AutoFilterMode = False
    End With
End Sub