【问题标题】:If Or Statement Always TrueIf 或语句始终为真
【发布时间】:2012-10-16 22:48:49
【问题描述】:

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

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

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

【问题讨论】:

  • 尝试使用AND?因为 OR 只需要 1 个条件为真/假即可执行。

标签: vba excel


【解决方案1】:

其他人提到了在这种情况下使用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 个问题,因为 Inidicative 应该拼写为 Indicative,但是这很容易理解。谢谢
  • @MikeKellogg -> 是的,一开始我在打字……然后我开始复制和粘贴:)。很高兴您找到了解决方案。
【解决方案2】:

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

您实际上需要使用“和”。逻辑如下:

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

如果你使用“和”:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-30
      • 2021-01-07
      • 2012-03-07
      • 2017-02-21
      • 2021-10-04
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多