Vba 如果或陈述总是正确的

Vba 如果或陈述总是正确的,vba,excel,Vba,Excel,摘要:我有一个电子表格,其中有许多不必要的列。因为将来可能会添加新的列,所以我将删除所有必要列的内容 问题:我在下面使用了一个长的If或语句,但它总是正确的。我试着在或和许多其他括号变体之间的每个语句周围加上括号,但没有一个是正确的。在括号的一个变体下,该语句总是错误的,但这是我收到的唯一更改 代码: If (Cells(4, i).Value <> "BATCH_ID" Or Cells(4, i).Value <> "Indicative" Or Cells(4, i

摘要:我有一个电子表格,其中有许多不必要的列。因为将来可能会添加新的列,所以我将删除所有
必要列的内容

问题:我在下面使用了一个长的
If或
语句,但它总是正确的。我试着在
和许多其他括号变体之间的每个语句周围加上括号,但没有一个是正确的。在括号的一个变体下,该语句总是错误的,但这是我收到的唯一更改

代码:

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
If(单元格(4,i).值“批次ID”或单元格(4,i).值“指示性”或单元格(4,i).值“公司代码”或单元格(4,i).值“保单编号”或单元格(4,i).值“数字金额”或单元格(4,i).值“法定金额”或单元格(4,i).值“付款金额”),然后
ActiveCell.EntRecolumn.Delete
如果结束
我做错了什么?提前谢谢

消极的“或”陈述往往会让人绊倒

实际上,您需要使用“and”。逻辑是这样的:

如果
xa或xb
,那么x可以是除a之外的任何东西,或者x可以是除b之外的任何东西。因此,如果x==a,则第二条语句为true,如果x==b,则第一条语句为true。对于OR,只有两个语句中的一个必须为真,才能使整个事件为真

如果使用“和”:

如果
xa和xb
,那么对于第一部分x可以是除a之外的任何东西,对于第二部分x可以是除b之外的任何东西,但是。。。如果x是a,那么第一部分是错误的,因此整个陈述都是错误的。

否定的或“否定的”陈述常常会让人困惑

实际上,您需要使用“and”。逻辑是这样的:

如果
xa或xb
,那么x可以是除a之外的任何东西,或者x可以是除b之外的任何东西。因此,如果x==a,则第二条语句为true,如果x==b,则第一条语句为true。对于OR,只有两个语句中的一个必须为真,才能使整个事件为真

如果使用“和”:


如果
xa和xb
,那么对于第一部分x可以是除a之外的任何东西,对于第二部分x可以是除b之外的任何东西,但是。。。如果x是a,则第一部分为false,因此整个语句为false。

尝试使用and,因为只有当它与任何内容都不匹配时,才希望删除这些行。因为或只需要1个条件为真/假即可执行

在您的情况下,它会说不等于“Batch_ID”(如果为真->delete)等

If(单元格(4,i).值“批次ID”和单元格(4,i).值“指示性”)则

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

在您的情况下,它会说不等于“Batch_ID”(如果为真->delete)等

If(单元格(4,i).值“批次ID”和单元格(4,i).值“指示性”)则

在本例中,其他人在使用
时暗示了一个伟大的概念。我还建议在有多个标准的情况下使用
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

其他人在本例中提到了在
上使用
的伟大概念。我还建议在有多个标准的情况下使用
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个条件为true/false即可执行。是否尝试使用AND?因为或只需要1个条件为true/false即可执行。这比我的方法可读性强,更容易理解。在这种情况下,出现了1个问题,因为
InIndicative
应该拼写为
Indicative
,但是,这很容易理解。Thanks@MikeKellogg->是的,起初我在打字。。。然后我就开始复制和粘贴:)。很高兴你找到了解决方案。这比我的方法可读性好,也更容易理解。在这种情况下,出现了一个问题,因为
指示性
应该拼写为
指示性
,但是,这很容易理解。Thanks@MikeKellogg->是的,起初我在打字。。。然后我就开始复制和粘贴:)。很高兴你找到了解决办法。