我有一个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分钟并且无法完成。
答案 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