【问题标题】:Excel 2007 VBA: delete row if cell value is between 600 and 699Excel 2007 VBA:如果单元格值介于 600 和 699 之间,则删除行
【发布时间】:2014-08-22 00:55:33
【问题描述】:

我一直在为这个问题苦苦挣扎。我正在尝试编写 VBA 代码来完成这个多工作表宏,我会提前感谢您的时间和知识。我真诚地感谢它。

我有一张大约 10 列、4,000 行的表格。目标是在“E”列中搜索 600 到 699 之间的值,并删除 E 列中值在 60​​0 到 699 之间的任何行。

现在我正在使用此行删除包含“602”的行:

Dim FoundCell As Range
Set FoundCell = Worksheets("StoreEmployeeImport").Range("E:E").Find(what:=602)
Do Until FoundCell Is Nothing
    FoundCell.EntireRow.Delete
    Set FoundCell = Worksheets("StoreEmployeeImport").Range("E:E").FindNext
Loop

有没有办法对 600 到 650 之间的所有值执行此操作? “快速而肮脏的方法”是为 600 到 650 之间的所有 50 个可能值编写此循环,但我知道有更好的方法。可能要简单得多。

谢谢!

【问题讨论】:

  • 谢谢-我会尝试这两个并报告。这将使我的生活变得更好。

标签: excel vba


【解决方案1】:

我就是这样处理的

'Get the last row, 65000th row and column E
finalRow=cells(65000,5).end(xlup).row
'Loop through data backwards
for i = finalRow to 1 step -1
  'Do your check
  if cells(i,5) > 600 and cells(i,5) < 650 then
    'Delete the row if criteria met
    cells(i,1).entirerow.delete
  end if
next i

【讨论】:

  • 这非常有效,非常感谢您的帮助。我完全按照你的方式输入了它,它就可以工作了。喜欢它。
  • 很高兴听到这个消息。感谢您的反馈。
【解决方案2】:

试试这个:

Sub qwerty()
    Dim N As Long, i As Long
    N = Cells(Rows.Count, "E").End(xlUp).Row
    Application.ScreenUpdating = False
    For i = N To 1 Step -1
        v = Cells(i, "E").Value
        If v > 599 And v < 700 Then
            Cells(i, "E").EntireRow.Delete
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

【讨论】:

  • 这个解决方案应该比我的工作得更快,因为它在运行时会关闭屏幕更新并调整变量的大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
  • 2014-03-20
  • 1970-01-01
相关资源
最近更新 更多