摘要:我有一个包含大量不必要列的电子表格。由于将来可能会添加新列,因此我删除了<>
必要列的任何内容。
问题:我在下面使用了一个很长的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
我在这里做错了什么?在此先感谢!
答案 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