将员工姓名与主列表进行比较

时间:2017-03-17 14:15:01

标签: excel vba excel-vba excel-2013

我正在将员工列表与主列表进行比较,并进行统计。这可以正常工作,但现在我需要添加一个警告来忽略计数中的某些员工姓名(如Manager, Supervisor, Mgr, Sup)。

收到的列表在A列中有位置,在C列中有名称 - 所以我需要忽略上面数组中C列中存在的名称。

... 这就是我用来返回计数的内容 - >如何修改以忽略上面列出的名称数组?

Const shLookup As String = "Master List"
Const shSetup As String = "Received"

With Worksheets(shLookup)
aData = .Range("a1").CurrentRegion
End With
ReDim aOutput(1 To UBound(aData), 1 To 3)
For i = 2 To UBound(aData)
iCount = Evaluate("=COUNTIF('" & shSetup & "'!A:A,'" & shLookup & "'!A" & i & ")")
If aData(i, 2) <> iCount Then
    n = n + 1
    aOutput(n, 1) = aData(i, 1)
    aOutput(n, 2) = aData(i, 2)
    aOutput(n, 3) = iCount
End If
Next

修改
示例工作表数据如下所示:

Master List sheet
Store   EmpCount
Memphis  23
Houston  13
Phili    10


Received List Sheet
Store   Region   EmpName
Memphis East     Joe
Memphis East     James
Memphis East     Jane
Memphis East     Supervisor
Memphis East     Manager

我所追求的是确保收到的清单上有23名孟菲斯员工,不包括以上名称。

编辑2
根据@PKatona评论中的建议 - 看起来我可以使用CountIF()函数计算“忽略”值,然后从我的整数中减去该计数。这种语法似乎一个接一个地工作,但是,我如何使它适应数组呢?

即。这会给我Manager的计数,但还有其他需要搜索的热门词语:

iIgnore = Evaluate("=COUNTIF(Range('" & shSetup & "'!A:A,'" & shLookup & "'!A" & i & "),"Manager")")

1 个答案:

答案 0 :(得分:0)

在没有语法检查的情况下脱离我的头脑,这里是你如何创建忽略值数组然后计算它们:

dim ignore() as String
ignore = Split("Manager,Supervisor,Mgr,Sup", ",")
dim ignoreCnt as integer
ignoreCnt = 0
dim aIdx as integer

for aIdx = 0 to UBound(ignore) - 1
    ignoreCnt = ignoreCnt + Evaluate("=COUNTIF(Range('" & shSetup & _
          "'!A:A,'" & shLookup & "'!A" & i & "),ignore(aIdx))")
next aIdx

ignoreCnt现在具有您要忽略的值的总和。如果你有更多,只需将它们添加到Split行中的字符串,UBound函数会自动获得循环的上限。