Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两组条件匹配时的VBA计数_Vba_Excel - Fatal编程技术网

两组条件匹配时的VBA计数

两组条件匹配时的VBA计数,vba,excel,Vba,Excel,我试着数到每三个当且仅当它紧跟着两个。我在一列G1:G100中有一个数据列表,它在1、2和3之间交替,我只是在寻找三跟在二后面的次数 我所使用的代码搜索每个实例并添加,但正如我所解释的,如果满足条件,我希望它只计算每个实例 Sub sample() Dim wsMain As Worksheet: Set wsMain = ThisWorkbook.Sheets("sheet1") Dim k As Long 'get count of cells that start with ring k

我试着数到每三个当且仅当它紧跟着两个。我在一列G1:G100中有一个数据列表,它在1、2和3之间交替,我只是在寻找三跟在二后面的次数

我所使用的代码搜索每个实例并添加,但正如我所解释的,如果满足条件,我希望它只计算每个实例

Sub sample()
Dim wsMain As Worksheet: Set wsMain = ThisWorkbook.Sheets("sheet1")
Dim k As Long

'get count of cells that start with ring
k = Application.WorksheetFunction.CountIf(Columns(7), "Two") + Application.WorksheetFunction.Countif(Columns(7)

If k > 0 Then
    Range("C2").Value = k
    End If


End Sub

为什么要使用VBA进行此操作? 您可能需要在VBA中执行循环

如果您避免使用VBA,您只需执行以下操作:

1在H1:=和G1=2,G2=3中创建一个公式 2把公式复制下来:H2:H100 3在任何其他单元格中,您需要最终答案: =COUNTIFH:H,对

我想那会更容易些

[编辑] 如果确实需要使用VBA,只需使用循环:

Sub test()
  Dim cnt As Integer
  cnt = 0
  For i = 1 To 100
    If Cells(i, 7).Value = "Two" And Cells(i + 1, 7).Value = "Three" Then
      cnt = cnt + 1
    End If
  Next i

  Range("C2").Value = cnt
End Sub
可能有一种更奇特的方法使用一些索引函数。。但与上述代码的复杂程度相比,我不确定这是否真的值得; [/edit]

a中的条件范围单元格范围必须大小相同,但不必位于同一平面上;i、 它们可以相互抵消

Sub two_three()
    Dim rng As Range, k As Long
    With Sheets("Sheet1")
        Set rng = Intersect(.Columns(7), .UsedRange)
        k = Application.CountIfs(rng, "two", rng.Offset(1, 0), "three")
        If k > 0 Then
            .Range("C2").Value = k
        End If
    End With
End Sub

无法偏移完整列引用,因为它已引用列中的每个单元格,并且没有可偏移的位置。但是,不太可能使用整个列,因此从列截断到的范围开始,应该允许您在第二个条件下向下偏移1行。

理论上,这会更容易,但是,我正在处理的代码是更大代码集的一部分。我正在尝试获取计数,以便代码知道要输出多少。我包含的代码是这样的,当我一步一步地通过这一行时,我可以直观地看到它工作正常。@user1664305-好的,然后,我添加了一个VBA循环,应该可以完成这个任务;