1

摘要:我有一个包含一堆不必要列的电子表格。因为将来可能会添加新列,所以我将删除<>必要列的任何内容。

问题:我在If Or下面使用了一个很长的陈述,但它总是正确的。我尝试在Or's 和许多其他括号变体之间的每个语句周围加上括号,但没有一个是正确的。在括号的一种变体下,该陈述总是错误的,但这是我收到的唯一变化。

代码:

If (Cells(4, i).Value <> "BATCH_ID" Or Cells(4, i).Value <> "Indicative" Or Cells(4, i).Value <> "Company Code" Or Cells(4, i).Value <> "Policy Num" Or Cells(4, i).Value <> "Numeric Amount" Or Cells(4, i).Value <> "Legal Amount" Or Cells(4, i).Value <> "PAYMENT_AMT") Then

      ActiveCell.EntireColumn.Delete

End If

我在这里做错了什么?提前致谢!

4

3 回答 3

10

其他人提到了在这种情况下使用Andover的一个很好的概念。Or我还建议Select Case在有多个标准的情况下使用它,因为它更容易阅读、理解和编辑。

Select Case Cells(4, i).Value

    Case Is = "BATCH_ID", "Indicative", "Company Code", "Policy Num", "Numeric Amount", "Legal Amount", "PAYMENT_AMT"

    Case Else: ActiveCell.EntireColumn.Delete

End Select
于 2012-10-16T14:34:35.490 回答
2

否定的“或”语句经常让人绊倒。

您实际上需要使用“和”。这是逻辑:

如果x <> a or x <> b, 那么 x 可以是除 a 之外的任何东西,或者 x 可以是除 b 之外的任何东西。因此,如果 x == a,则第二个语句为真,如果 x == b 第一个语句为真。使用 OR,只要两个陈述中的一个为真,整个事情就为真。

如果你使用“和”:

如果x <> a AND x <> b, 那么对于第一部分 x 可以是除 a 之外的任何东西,对于第二部分 x 可以是除 b 之外的任何东西,但是...如果 x 是 a 那么第一部分是假的,所以整个陈述是假的。

于 2012-10-16T14:31:05.330 回答
2

尝试使用 AND,因为您只想删除不匹配的行。因为 OR 只需要 1 个条件为真/假即可执行。

在你的情况下,它会说不等于“Batch_ID”(如果它是真的-> 删除)等等..

If (Cells(4, i).Value <> "BATCH_ID" AND Cells(4, i).Value <> "Indicative") Then
于 2012-10-16T14:32:29.090 回答