繁体   English   中英

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

[英]How to remove a row in Excel based on cell value?

我有一个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分钟,无法完成。

如果要删除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

编辑1

请勿使用此宏

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

编辑2

此版本已解决问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM