【问题标题】:For each +if (or) statement对于每个 +if (or) 语句
【发布时间】:2021-05-13 20:27:18
【问题描述】:

我正在努力解决以下问题:工作表中的三列,在 C 列中,有各种供应商名称(供应商 1、2、3、4、5 等),我想使用如果满足某些条件,则 for..each 与 if 语句的组合可删除整行。到目前为止,我已经想出了下面的代码。

代码是这样工作的,问题是它只删除给定范围内的一定数量的供应商记录。Egif 我的表中有 20 条“供应商 1”记录,代码删除了其中的 10 条,然后我必须再次手动运行代码才能删除其余部分。另一个问题是我的范围也可以是动态的,也许你也可以就此提出建议。我尝试将我的范围定义为整个 C 列,但这显然没有意义,长期而言。 (而且无论如何也没有解决必须多次运行代码的问题)

Sub peters()
Dim rng As Range
Dim cell As Range
Set rng = Sheet2.Range("C1:C37")
For Each cell In rng
If cell.Value = "Supplier 1" Or cell.Value = "Supplier 2" Then
cell.EntireRow.Delete
End If
Next cell
End Sub

【问题讨论】:

  • 删除行/列时,最好从最后一行/列开始。如果你往下走,因为在删除一行后行会上升,所以不会检查旧删除位置的新行。 (因此在您的案例中只有一半删除的行)

标签: vba if-statement foreach


【解决方案1】:

为了保持范围动态,您可以使用:

Set rng = Sheet2.Range("A1").CurrentRegion.Columns(3)

上述的正确性将取决于数据字段的方式。 CurrentRegion 包括所有相邻的已填充单元格。

【讨论】: