我试图计算每个“三”,当且仅当它跟在“两个”之后。我在一列(G1:G100)中有一个数据列表,在“一,二和三”之间交替显示,我只是在寻找三次跟随两次的次数。
我正在使用的代码搜索每个实例并添加但是正如我所解释的那样,如果条件满足,我希望它只计算每个实例。
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
答案 0 :(得分:0)
为什么要为此使用VBA? 您可能需要在VBA中执行循环,
如果你避免使用VBA,你可以这样做:
1)在H1中创建一个公式:=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函数可能会有更高级的方式..但我不确定它是否真的值得与上面代码的复杂程度相比;) [/编辑]
答案 1 :(得分:0)
COUNTIFS function中的 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 property范围的列开始应该允许您将第1行向下偏移第二个条件。