我正在将员工列表与主列表进行比较,并进行统计。这可以正常工作,但现在我需要添加一个警告来忽略计数中的某些员工姓名(如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")")
答案 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函数会自动获得循环的上限。