如果Or Statement Always True

时间:2012-10-16 14:27:54

标签: excel vba excel-vba

摘要:我有一个包含大量不必要列的电子表格。由于将来可能会添加新列,因此我删除了<>必要列的任何内容。

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

代码:

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

我在这里做错了什么?在此先感谢!

3 个答案:

答案 0 :(得分:10)

在这种情况下,其他人提到了使用And优于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

答案 1 :(得分: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,那么第一部分是假的,并且所以整个陈述都是假的。

答案 2 :(得分:2)

尝试使用AND,因为如果它与任何内容都不匹配,您只想删除它们。因为OR只需要1个条件才能执行true / false。

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

If (Cells(4, i).Value <> "BATCH_ID" AND Cells(4, i).Value <> "Indicative") Then