如果 B 列有 8 行,则有 xx xxx xx xxxx xx xxxx xx xxx。我需要找出有多少组两个 X、三个 x 和四个 x。上述结果将是 xx = 4、xxx = 2 和 4 = 2。我试过 VBA,但计数从来都不正确。
答案1
如果我理解正确的话,也许是这样的?
Sub test()
Dim rg As Range
Dim ocr1, ocr2, ocr3, ocr4, ocr5, ocr6, ocr7
Set rg = Range("H1")
If rg = "" Then Set rg = rg.End(xlDown)
Do
If rg.Offset(1, 0) <> "" Then
Select Case Range(rg, rg.End(xlDown)).Rows.Count
Case 2: ocr2 = ocr2 + 1
Case 3: ocr3 = ocr3 + 1
Case 4: ocr4 = ocr4 + 1
Case 5: ocr5 = ocr5 + 1
Case 6: ocr6 = ocr6 + 1
Case 7: ocr7 = ocr7 + 1
End Select
Set rg = rg.End(xlDown).End(xlDown)
Else
ocr1 = ocr1 + 1
Set rg = rg.End(xlDown)
End If
Loop Until rg.Row = Rows.Count
Debug.Print "no consecutive occurence = " & ocr1
Debug.Print "two consecutive occurence = " & ocr2
Debug.Print "three consecutive occurence = " & ocr3
Debug.Print "four consecutive occurence = " & ocr4
Debug.Print "five consecutive occurence = " & ocr5
Debug.Print "six consecutive occurence = " & ocr6
Debug.Print "seven consecutive occurence = " & ocr7
End Sub
目标是获取每个连续行中某个值出现的次数。
rg 变量是要开始的单元格。
如果 rg 为空,则执行 end(xldown) 并将此单元格设置为 rg。
然后它循环
首先,它检查 rg 下方的单元格是否为空,如果为空则表示没有连续出现,因此它将 ocr1 变量加 1,然后将 rg 设置为下一个具有值的 rg
如果 rg 下方的单元格不为空,则使用一个案例来说明连续出现的范围有多少行。每个行都分配给各自的变量。
如果有连续两行有值,则将 ocr2 加 1。
如果有连续三行有值,则将 ocr3 加 1。
以此类推。
然后将 rg 设置为下一个有值的 rg
由于我不知道最大值有多少个连续的行,所以我只将其设为 7。如果您知道存在限制(意味着您知道具有值的连续行不会超过 4),那么只需删除案例 5 到案例 7。
再次运行图片中显示的工作表处于活动状态的子程序
,如果我理解正确的话。