【问题标题】:Reset the loop when the condition is met excel vba满足条件时重置循环excel vba
【发布时间】:2018-10-17 01:27:02
【问题描述】:

我有一张 Excel 表格。我想在满足条件时重置循环,因为我有两个条件。但是,我想在这个解决方案网站Reset a for loop when a condition is met vba 的 for 循环旁边实施步骤。它不起作用,因为它仅适用于数字而不是 A1。解决此问题的解决方案是什么?谢谢。

Sub run()
 Set MR = Range("A1:Q1")
    'Loop through the cell in the first row
    For Each cell In MR
        If cell.Value = "First Discovered" Or cell.Value = "Last Observed" Then cell.EntireColumn.Delete
    Next cell
End Sub

【问题讨论】:

  • 我认为解决方案是仅在满足条件时重置循环。我应该扩展我的思维以寻找其他解决方案。感谢您提供出色的解决方案。

标签: excel vba


【解决方案1】:

如果您想查看第一行的列A:Q,您不需要重置循环。关键是避免在循环内删除,因为这会在循环范围内产生变化。

以下解决方案将遍历您的范围并将目标单元格添加到Union(单元格集合),一旦循环完成,它将删除Union中所有单元格的列


还有,

添加Option Explicit。你需要声明你的变量,Option Explicit 会强制你这样做。这也间接地充当了一个方便的拼写检查器。

最后一件事:我将您的变量 'cell' 更改为 'myCell' 以避免与现有对象 Cells 混淆


Option Explicit

Sub run()

Dim MR As Range, myCell As Range, DeleteMe As Range

Set MR = Range("A1:Q1")

For Each myCell In MR
    If myCell = "First Discovered" Or myCell = "Last Observed" Then
        If DeleteMe Is Nothing Then
            Set DeleteMe = myCell
        Else
            Set DeleteMe = Union(DeleteMe, myCell)
        End If
    End If
Next myCell

If Not DeleteMe Is Nothing Then DeleteMe.EntireColumn.Delete

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2017-02-03
    相关资源
    最近更新 更多