Excel计算列中项目的特定顺序

时间:2014-03-21 13:03:29

标签: excel vba

那天早上好!

我有一个电子表格,其中包含以下内容的列(请省略数字,它们用于格式化打开,关闭,不可用的单元格):

  1. OPEN
  2. OPEN
  3. 不可用
  4. OPEN
  5. CLOSED
  6. OPEN
  7. CLOSED
  8. 不可用
  9. CLOSED
  10. 不可用
  11. OPEN
  12. 我正在寻找一种解决方案(VBA更可取),它可以计算单元格中的单元格从OPEN变为CLOSE到OPEN的次数。在这个例子中,正确数量的'周期'将是2.我不确定如何合并一个移动的COUNT,它主动寻找一个条件然后找到一个,计算它,然后向下移动继续寻找。 / p>

    提前感谢您的帮助!

    编辑:

    感谢Michael Moulsdale的answer!我编辑了代码以查找空白单元格而不是END。这是代码:

    PrivateSub CommandButton1_Click()
    Dim VarCycles
    Dim BooStart
    Dim booClosed
    
    VarCycles = 0
    BooStart = False
    booClosed = False
    
    Range("B2").Select
    While Selection.Value <> IsEmpty("B2")
        If Selection.Value = "OPEN" And BooStart = False Then
            BooStart = True
        End If
        If Selection.Value = "CLOSED" And BooStart = True Then
            BooStart = False
            VarCycles = VarCycles + 1
        End If
        Selection.Offset(1, 0).Select
    Wend
    Range("B1").Select
    Selection.Value = VarCycles
    

    End Sub

2 个答案:

答案 0 :(得分:0)

我认为你可以用这个功能来做到这一点:

=IF(AND(A1="OPEN"; A2="CLOSED"; A3="OPEN"); 1; 0)

将它放在第一行并拉出单元格以将其应用于所有列。但在你的例子中,我认为只有一个&#34;周期&#34;,不是吗?

答案 1 :(得分:0)

使用VBA我会做类似以下的事情。应该注意的是,我添加了一个END作为列表中的最后一个变量,并用它来测试最后一个值。但你可以同样测试适合你情况的空白或其他机制

Sub Macro1()
'
' Macro1 Macro
'

'
    varCycles = 0
    booStart = False
    booClosed = False

    Range("B2").Select
    While Selection.Value <> "END"
        If Selection.Value = "OPEN" And booStart = False Then
            booStart = True
        End If
        If Selection.Value = "CLOSED" And booStart = True Then
            booStart = False
            varCycles = varCycles + 1
        End If
        Selection.Offset(1, 0).Select
    Wend
    Range("B1").Select
    Selection.Value = varCycles
End Sub