对 Excel VBA AND OR 逻辑运算符感到头晕

Dizzy with Excel VBA AND OR logical operators

我希望我的程序删除 column a (cA) is Fund ID 6347 OR 6349 AND 具有 less than +/-100 AND[= 基点影响的任何行26=] less than +/-50% price change

以下代码用于删除行:either fund and a basis point impact +/- 100 但我不认为它按照我的意图工作,因为在极其混乱的括号中加上可怜的 2007 excel IDE 界面,当我删除第一行中的 cells(i, cJ) >= -100) 代码时,我的测试失败了,这让我相信我的代码在某种程度上可以部分工作,但只是偶然。

有人理解我试图编码的逻辑吗?是否有一些 Web GUI,我可以编写代码 excel VBA 并看到突出显示的括号以便在这些情况下获得更好的体验?谢谢

        For i = LR To 2 Step -1

                     If (Left(CStr(cells(i, cA)), 4) = "6347" And (cells(i, cJ) <= 100 And cells(i, cJ) >= -100)) Or _
                     (Left(CStr(cells(i, cA)), 4) = "6349" And (cells(i, cJ) <= 100) And cells(i, cJ) >= -100) Or _
                     Left(CStr(cells(i, cC)), 4) = "Trs " Or _
                     Mid(CStr(cells(i, cC)), 15, 8) = "bcomf1t " Or _
                     Mid(CStr(cells(i, cC)), 15, 7) = "bcomtr " Then

在构建 if 语句之前从电子表格中提取变量,然后将它们放在每一行中。这样效率更高,也更容易阅读。按照您的规范声明:

I would like my procedure delete any row in which column a (cA) is Fund ID 6347 OR 6349 AND has a basis point impact of less than +/-100 AND less than +/-50% price change

它看起来像这样(请注意,我在猜测什么值来自哪里,并且您的代码有您未指定的其他条件):

Dim FundId As String
FundId = Left$(Cells(i, cA).Value, 4)
Dim BasisImpact As Long
BasisImpact = Cells(i, cJ).Value
Dim PriceChange As Long
PriceChange = Cells(i, whereever).Value

If (FundId = "6347" Or FundId = "6349") And _
   (BasisImpact >= -100 And BasisImpact <= 100) And _
   (PriceChange >= -50 And PriceChange <= 50) Then

正如@Jeeped 在评论中指出的那样,VBA 将在 If 语句中执行 所有 测试(它不会缩短电路)。如果这是代码的性能关键部分或者您有庞大的数据集,嵌套 If 语句和工作表访问将为您提供更好的性能:

If FundId = "6347" Or FundId = "6349" Then
    Dim BasisImpact As Long
    BasisImpact = Cells(i, cJ).Value
    If BasisImpact >= -100 And BasisImpact <= 100 Then
        Dim PriceChange As Long
        PriceChange = Cells(i, whereever).Value
        If PriceChange >= -50 And PriceChange <= 50 Then
            'Do your thing
        End If
    End If
End If

如果您只关心 "fund" 和 "impact" 检查,请按以下方式进行:

Dim okFund As Boolean, okImpact As Boolean

For I = LR To 2 Step -1

    okFund= Left(CStr(Cells(I, cA)), 4) = "6347" Or (Left(CStr(Cells(I, cA)), 4) = "6349"
    okImpact = Cells(I, cJ) <= 100 And Cells(I, cJ) >= -100

    If okFund And okImpact Then