加快删除Excel中的列

Enn*_*ile 3 excel vba excel-vba

我正在使用此公式删除工作表中的空列.但删除它们大约需要15-20分钟.我可以以某种方式加快这个过程吗?很奇怪,它花了这么长时间,我只使用100列.

For j = 1 To 5
    For i = 40 To 146
        If Sheet8.cells(4, i) = "" Then
            Columns(i).EntireColumn.Delete
        End If
    Next i
Next j
Run Code Online (Sandbox Code Playgroud)

Pᴇʜ*_*Pᴇʜ 6

如果你有真正的银行电池使用@Patrick Honorez答案使用SpecialCells(xlCellTypeBlanks)速度更快.

但是如果你没有真正的空白单元格(例如显示为的公式""),那么你可以使用它:

Dim DeleteRange As Range

With sheet8
    Dim i As Long
    For i = 40 To 146
        If .Cells(4, i).Value = vbNullString Then 'vbNullString = ""
            If DeleteRange Is Nothing Then
                Set DeleteRange = .Columns(i)
            Else
                Set DeleteRange = Union(DeleteRange, .Columns(i))
            End If
        End If
    Next i
End With

If Not DeleteRange Is Nothing Then 'check if there is something to delete
    DeleteRange.EntireColumn.Delete
End If
Run Code Online (Sandbox Code Playgroud)

它会收集您要删除的所有列,DeleteRange然后立即删除它们.这比删除每个列本身更快,因为每个删除操作都需要它的时间(这里我们只有一个删除操作).

请注意,我们不需要在此向后循环,因为我们只收集循环中的列,但是在循环之后删除操作,因此它根本不会影响循环计数.