如果或声明总是为真

简介:我有一大堆不需要的列的电子表格。 因为新的列可能会在未来添加我删除任何<>必要的列。

问题:我有一个长的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 

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

其他人在这种情况下暗示了一个伟大的概念。 我还build议使用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 

消极的“或”言论经常让人们trip咽起来。

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

如果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,那么第一部分是假的,所以整个陈述是错误的。

尝试使用AND,因为你只想删除行,如果它什么都不匹配。 因为OR只需要1个条件是真/假来执行。

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

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