宏与countif排除其他值

时间:2013-03-19 17:06:04

标签: excel vba

我有一个宏可以帮助我在2个数据集之间执行countif功能,看看指定为“我们的”的所有数据是否包含在指定为“他们的”的数据集中。此宏适用于其他数据比较。但是,我想比较一下我可能具有欧洲其他地区(如果这是欧洲名单)或美国其他地区(当有美国名单提供国家时)的国家。有没有办法以这种方式修改它,如果它符合“欧洲其他地区”的价值,它将检查除了它上面出现的值之外的所有其他东西 - 换句话说:在B2:B7范围内出现的所有东西应该是被排除在外。每个数据集的范围都不相同,因此它应该调整到长度(就像现在一样)。欧洲其他国家/美国其他地区将永远位于列表的最后。有人可以帮我这个吗?

截图

enter image description here

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。 - 我在发布这个问题之前做了网络研究。但是,我的研究没有带来任何积极的结果。

2 个答案:

答案 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代码将此功能插入到工作表中。

enter image description here