删除空(“”)行VBA

时间:2018-10-20 18:44:48

标签: excel vba excel-vba

我正在搜索2个小时... 但是我没有使它起作用,我在stackoverflow上看到了很多相关的问题...但是还没有找到正确的解决方案……(

我要寻找的是: 我有一个Excel,这是使用Power查询构建的。 (完美运行) 我有一个vba脚本,可以每4小时刷新一次电源查询(完美运行) 我有一个vba脚本,可将所有工作表提取到csv(完美运行)

但是有一个陷阱,工作表是用特殊字符构建的,所以我确实创建了一个额外的工作表,其中包含您可能认为的所有替换...(效果也很好)

但是此额外的工作表使用了3000行的信息。 (基于从功率查询中提取的表)。强大的查询功能仍然存在,有时我需要2000行,有时需要2800 +,这就是为什么我确实基于3000行制作了额外的工作表的原因...

使用公式:

=IFERROR(substitutions.....;"")

文件底部的单元格看起来是空的,因为我确实在公式中使用了“”,但是实际上单元格不是空的。所以我需要一个vba脚本,它将查找空白的单元格。用“”创建...

2 个答案:

答案 0 :(得分:1)

这将更快。与其在循环中删除单元格,不如在循环之外删除单元格。这将导致仅删除行的一个实例。


Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.ActiveSheet
Dim rng As Range, myCell As Range, DeleteMe As Range

'Loop to find rows to delete
For Each myCell In ws.Range("A1:A3000")
    If myCell = "" Then
        If DeleteMe Is Nothing Then
            Set DeleteMe = myCell
        Else
            Set DeleteMe = Union(DeleteMe, myCell)
        End If
    End If
Next myCell

'Delete rows here
If Not DeleteMe Is Nothing Then DeleteMe.EntireRow.Delete

End Sub

答案 1 :(得分:0)

我确实找到了解决方法:

Sub DeleteRowsWithEmptyColumnDCell()
Dim rng As Range
Dim i As Long
Set rng = ThisWorkbook.ActiveSheet.Range("A1:A3000")
With rng
    ' Loop through all cells of the range
    ' Loop backwards, hence the "Step -1"
    For i = .Rows.Count To 1 Step -1
        If .Item(i) = "" Then
            ' Since cell is empty, delete the whole row
            .Item(i).EntireRow.Delete
        End If
    Next i
End With
End Sub

但是它很慢并且占用大量内存...我希望有人有更好的解决方案!