我有一个宏可以帮助我在2个数据集之间执行countif功能,看看指定为“我们的”的所有数据是否包含在指定为“他们的”的数据集中。此宏适用于其他数据比较。但是,我想比较一下我可能具有欧洲其他地区(如果这是欧洲名单)或美国其他地区(当有美国名单提供国家时)的国家。有没有办法以这种方式修改它,如果它符合“欧洲其他地区”的价值,它将检查除了它上面出现的值之外的所有其他东西 - 换句话说:在B2:B7范围内出现的所有东西应该是被排除在外。每个数据集的范围都不相同,因此它应该调整到长度(就像现在一样)。欧洲其他国家/美国其他地区将永远位于列表的最后。有人可以帮我这个吗?
截图
MY MACRO:
Sub GOOD_ALMOST_C_Countif_Until_LastRow()
Dim LastRowColumnB As Long
LastRowColumnB = Range("B65000").End(xlUp).Row
For i = 2 To LastRowColumnB
Cells(i, 3) = Application.CountIf(Range("A:A"), Cells(i, 2))
Next
End Sub
P.S。 - 我在发布这个问题之前做了网络研究。但是,我的研究没有带来任何积极的结果。
答案 0 :(得分:2)
最简单的想法完全适合您的非动态数据范围(只是一些数学):
If Cells(i,2) = "Rest of Europe" Then
Cells(i,3) = Cells(Rows.Count, "A").End(xlUp).Row - 1 - _
WorksheetFunction.Sum(Range(Cells(2,3), Cells(i-1, 3)))
End If
假设您在A:A中只有欧洲国家
答案 1 :(得分:0)
如果你想计算剩余的单元格,除了条件,那么只计算范围A:A中的非空单元格,然后计算所有count-ifs的suma。
结果是:.Cells(lastRowColumnB, 3) = nonEmptyCount - countIfAll
Public Sub CountIfAllAndTheRest()
Dim countIfOne As Long
Dim countIfAll As Long
With ActiveSheet
Dim nonEmptyCount As Long
nonEmptyCount = WorksheetFunction.CountA(.Range("A:A")) - 1 ' -1 for header row
Dim lastRowColumnB As Long
lastRowColumnB = .Range("B" & .Rows.Count).End(xlUp).Row
Dim i As Long
For i = 2 To lastRowColumnB
countIfOne = Application.CountIf(.Range("A:A"), .Cells(i, 2))
.Cells(i, 3) = countIfOne
countIfAll = countIfAll + countIfOne
Next
.Cells(lastRowColumnB, 3) = nonEmptyCount - countIfAll
End With
End Sub
依靠多个条件,您可以创建自己的功能。例如,以下函数链接所有条件的count-ifs 。例如,新墨西哥州,内华达州,阿拉斯加州和俄勒冈州将被链接到count-if。
Public Function CountMyStates(ByRef where As Range) As Long
Dim criteria(0 To 3) As String
criteria(0) = "New Mexico"
criteria(1) = "Nevada"
criteria(2) = "Alaska"
criteria(3) = "Oregon"
With ActiveSheet
Dim countMultiple As Long
CountMyStates = Application.CountIf(where, criteria(0)) + _
Application.CountIf(where, criteria(1)) + _
Application.CountIf(where, criteria(2)) + _
Application.CountIf(where, criteria(3))
End With
End Function
然后可以手动或通过vba代码将此功能插入到工作表中。