2013-03-19 30 views
2

我有一个宏,它可以帮助我做两个数据集之间的countif函数,并查看指定为“他们”的数据集中是否包含指定为“Ours”的所有数据。这个宏对其他数据比较工作正常。然而,我想比较哪些国家的底部可能有欧洲其他国家(如果这是欧洲名单)或美国其他国家(当美国有提供国家的名单时)。有没有办法以这种方式修改它,如果它符合“欧洲其他地区”的价值,它将检查除上面出现的值之外的其他值 - 换句话说:所有出现在范围B2:B7中的值都应该是排除在外。每个数据集的范围并不相同,因此它应该根据长度进行调整(与现在一样)。欧洲其他地区/美国其他地区将永远在名单的最后。任何人都可以帮助我吗?宏与countif排除其他值

截图

enter image description here

我的微距:

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 

附: - 我在发布这个问题之前做了网络研究。但是,我的研究没有带来任何积极的结果。

回答

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 

假设,那你只有欧洲国家在答:

+0

这两个代码(你的和丹尼尔的)工作正常。你的似乎更简单,为我的目的更容易使用。我想对这段代码做的事情是让它不区分大小写(如果有人决定把“欧洲其他地区”而不是“欧洲其他地区”并破坏代码)。我知道通常在使用函数时我应该使用= SUBSTITUTE()。但是,我应该如何修改代码以使替代功能起作用? – mgunia 2013-03-20 09:29:57

+1

将第一行更改为:'如果UCase(Cells(i,2))=“REST OF EUROPE”Then' – 2013-03-20 09:35:20

+0

Works fine。谢谢。 – mgunia 2013-03-20 10:39:40

0

如果你想算剩余的单元格的值不同于标准,然后只计算范围A:A中的非空单元格,然后计算所有count-ifs中的非空单元格。

所以,结果是:.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 

要在,你可以创建自己的功能,多重标准计算。作为示例,以下函数链接所有条件的计数。在这里例如新墨西哥州,内华达州,阿拉斯加州和俄勒冈州将被链接到计数 - 如果。

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