首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在VBA中for循环中的If语句不工作。

如果在VBA中for循环中的If语句不工作。
EN

Stack Overflow用户
提问于 2018-06-21 08:38:09
回答 1查看 175关注 0票数 1

我有这样一张纸:

代码语言:javascript
复制
G                M              N           O
Warrant/Rights                              08-06-2020
NA          
Share                           1   
Share           
Share                           1   
Share            4,5                        15-02-2026
Share                                       06-01-2026
Share            4                          15-03-2023
Share                                       30-09-2027

然后,我尝试按类型将GShare与按日期划分的列O进行比较。这样,如果在列O中是输入日期不足的百分比,则程序将在类型Share之后清除M to O中的所有单元格。我有这样的事情:

代码语言:javascript
复制
Sub aaa()
    x1 = Application.WorksheetFunction.CountIfs(Range("G2:G" & rows.Count), "Share")
    y1 = Application.WorksheetFunction.CountIfs(Range("G2:G" & rows.Count), "Share", Range("O2:O" & rows.Count), "")
    If x1 > 0 Then
        z1 = (y1 / x1) * 100
        Dim LR24 As Long, i24 As Long
        LR24 = Range("G" & rows.Count).End(xlUp).Row
        For i24 = LR24 To 1 Step -1
            If (Range("G" & i24).Value = "Share" And z1 < 90) Then Range("M" & i24 & ":O" & i24).Clear
        Next i24
    End If
End Sub

在移除条件If x1> 0 Then后,一切都可以工作,但我必须把它放在这里,以保护自己不被除以0。你知道为什么它不起作用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-21 09:32:32

您可以删除您的If...End If语句并替换您的z1=.与:

代码语言:javascript
复制
z1 = IIf(x1 = "", 0, (y1 / x1) * 100)

它是未经测试的,所以我不知道它将如何影响您的其余代码,但您将不会得到该行的Div/0错误。

它使用的不是If,而是Iif函数(内联If或即时If的缩写,取决于您询问的对象)。

您没有理由不能以同样的方式使用标准的If..Then语句,只位于一行附近,而不是阻止代码部分的执行。

更多资料:

  • MSDN:Function
  • 维基百科:IIf
  • 全景图:http://www.panopticoncentral.net/2006/12/29/iif-a-true-ternary-operator-and-backwards-compatibility/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50964035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档