【问题标题】:MsgBox doesn’t give a valueMsgBox 没有给出值
【发布时间】:2023-04-06 14:45:01
【问题描述】:

在“V34:V99”列中,数字1、2、3、0的顺序是分散的。 我想计算(n)有多少种情况(三个连续的1к=3,不考虑零),如果出现2或3,那么k=o。 我写了代码,但它不起作用(没有给出多种情况(n))。

0
1
0
1
0
0
0
1
0
1
0
0
0
0
1
0
0
1
0
0
1
0
0
1
0
0
1
0
0
0
1
0
0
0
0
3
0
1
0
3
0
0
0
3
0
1
0
1
0
0
1
3
0
1
0
0
0
0
0
0
0
0
0
0
0
0

代码

Sub а33условие3()

    Dim k, n As Integer
    Dim parRange As Range

    Set parRange = Range("V34:V99")
    k = 0
    n = 0
    For Each Cell In parRange.Rows

        If Cell.Value = 1 Then
            k = k + 1
            If k = 3 Then
                n = n + 1
                k = o
                MsgBox n
           End If
        End If
        If Cell.Value = 2 Or 3 Then
            k = 0
        End If
    Next Cell  

End Sub

【问题讨论】:

  • 您要检查V34:V99 范围内的值还是整行?因为现在您正在检查整行 (parRange.Rows)。如果这是正确的,那么我认为通过使用For Each Cell In parRange.Rows,您可以按列获取单元格,即A34, A35, A36,...,A99, B34, B35,...
  • 此外,您可以通过将 End If, If Cell.Value = 2 Or 3 替换为 ElseIF Cell.Value = 2 Or 3来避免额外的 if 语句另外我不确定 Or 语句是否像这样工作,或者您应该写 Cell.Value = 2 Or Cell.Value = 3
  • @Luuklag , Cell.Value = 2 或 Cell.Value = 3 有帮助,现在一切正常。非常感谢!
  • 我将其添加为答案。

标签: vba excel loops msgbox


【解决方案1】:

您不能以这种方式使用Or 语句。您应该使用Cell.Value = 2 Or Cell.Value = 3 也可以为自己保存一个If 语句,请参阅下面的更新代码:

Sub а33условие3()

Dim k, n As Integer
Dim parRange As Range

Set parRange = Range("V34:V99")
k = 0
n = 0
For Each Cell In parRange.Rows

    If Cell.Value = 1 Then
        k = k + 1
        If k = 3 Then
            n = n + 1
            k = o
            MsgBox n
        End If
    ElseIf Cell.Value = 2 Or Cell.Value = 3 Then
        k = 0
    End If
Next Cell  

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多