用Excel VBA和OR逻辑运算符晕了

我希望我的程序删除column a (cA) is Fund ID 6347 OR 6349 ,且基点影响less than +/-100 less than +/-50% price change

下面的代码用于删除行: either fund and a basis point impact +/- 100但我不相信它是根据我的意图工作,因为在混杂的十分困惑的圆括号与可怜的2007年Excel IDE接口,当我删除第一行中的cells(i, cJ) >= -100)代码时,我的testing失败了,导致我相信在某种程度上,我的代码部分工作,但意外。

有没有人了解我想要编码的逻辑? 是否有一些网页graphics用户界面,我可以编写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 

如果您只关心“基金”和“影响”检查,那么就这样做:

 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 

构buildif语句之前,将variables从电子表格中提取出来,然后在每行中放入一个。 这样做效率更高,使读起来更容易。 遵循您的规格说明:

我希望我的程序删除a(cA)栏中的任何一行是基金ID 6347或6349,基点影响小于+/- 100,小于+/- 50%的价格变化

它看起来像这样(注意,我在猜测哪些值来自哪里,而且你的代码还有你没有指定的附加条件):

 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语句中执行所有的testing(它不会短路)。 如果这是您的代码性能关键部分,或者您有一个巨大的数据集,嵌套的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