VBA Countif两套标准匹配

我试图把每一个“三”都算在“两”之后。 我有一列(G1:G100)中的数据列表,在“一,二和三”之间交替,我只是在寻找三次跟随两次的次数。

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

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中创build一个公式: =AND(G1="Two",G2="Three") 2)将该公式复制下来:H2:H100 3)在任何其他单元格中,您需要最终答案: =COUNTIF(H:H,TRUE)

我会认为这会更容易?

如果你真的需要使用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 

使用某些INDEX函数可能会有更奇妙的方式,但是我不确定它是否真的值得它与上面的代码的复杂度相比;)[/编辑]

COUNTFS函数中的criteria_range单元格范围必须是相同的大小,但不必位于同一平面上; 即它们可以相互抵消。

 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 

您无法偏移完整的列引用,因为它已经引用了列中的每个单元格,并且无处可以抵消。 但是,整个列的使用是不太可能的,因此从列的截断开始到Worksheet.UsedRange属性应该允许您为第二个条件偏移1行。