如何根据单元格值删除Excel中的行?

时间:2013-09-10 23:20:59

标签: vb.net excel

我有一个Excel,我想根据特定的单元格值删除一些行,但是Excel非常庞大,它有大约75000行。我尝试编写一个普通函数来遍历工作表,检查单元格值并删除匹配的行,但这需要很长时间。我等了30分钟,程序还在运行,有人建议我如何实现这个目标。

以下是代码。

Private Sub CommandButton1_Click()
    Dim i As Integer

        For i = Range("D1").End(xlDown).Row To 1 Step -1
                If Cells(i, 4) = 7 Then
                    Rows(i).Delete Shift:=xlUp
                End If
        Next i
End Sub

我测试了这个代码用于50行的小型Excel文件,它运行正常。但是当我尝试使用excel时,我想尝试它让我等待30分钟并且无法完成。

1 个答案:

答案 0 :(得分:1)

如果要删除列D的值为7且D列中没有空格的行,请运行:

Sub Tachyon()
    Dim rD As Range
    Set rD = Intersect(Range("D:D"), ActiveSheet.UsedRange)
    rD.Replace "7", ""
    rD.Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

<强> EDIT1

请勿使用此宏

测试表明它不仅删除D列中包含7的行,还删除其单元格包含77或777的行。它还会破坏17或71之类的值。我们需要更好的东西。

<强> EDIT2

此版本修复了问题:

Sub Tachyon2()
    Dim rD As Range
    Set rD = Intersect(Range("D:D"), ActiveSheet.UsedRange)
    rD.Replace What:="7", Replacement:="", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    rD.Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub