不同的多标准(文本)-Excel 2010/2013

不同的多标准(文本)-Excel 2010/2013,excel,Excel,表1 第2页 Team Name Red John B. Red Jim Red Mike A. Red John B. Blue Victor Blue Victor Blue Victor Yellow Mike Z. 我需要的是所有三个团队(红色、蓝色、黄色)的唯一计数数,并且不重复地计数该组中的名称 Red: Total Blue: Total Yellow: Total 我已经试着弄明白了,但我无法让它发挥作用(

表1

第2页

Team    Name
Red     John B.
Red     Jim
Red     Mike A.
Red     John B.
Blue    Victor
Blue    Victor
Blue    Victor
Yellow  Mike Z.
我需要的是所有三个团队(红色、蓝色、黄色)的唯一计数数,并且不重复地计数该组中的名称

Red:    Total
Blue:   Total
Yellow: Total
我已经试着弄明白了,但我无法让它发挥作用(


谢谢!

您可以借助帮助栏来完成此操作

假设
Sheet1
上的数据在
A
B
列中,
将此公式放入列
C
,并复制所有使用的行

Red     3 (John B. appears twice)
Blue    1 (Victor appears three times)
Yellow  1
然后,在
Sheet2
中,将此公式放在您的颜色名称旁边(我假设它们在
A列中)


注意,从
表2中的名称中删除
,使其与
表1上的数据相匹配

您可以使用用户定义的函数执行此操作 要输入此用户定义函数(UDF),alt-F11打开Visual Basic编辑器。 确保项目在“项目资源管理器”窗口中高亮显示。 然后,从顶部菜单中选择插入/模块和 将下面的代码粘贴到打开的窗口中

要使用此用户定义函数(UDF),请输入第二页所示的团队名称,如A2:A4所示

=SUMIFS(Sheet1!C:C,Sheet1!A:A,A1)
在一些单元格中,根据需要填充

=CountTeamMembers(Sheet1!$A$2:$B$10,A2)
选项显式
函数CountTeamMembers(TeamNameTbl作为范围,sTeam作为字符串)的长度
将名称作为集合
Dim V作为变体
我想我会坚持多久
Set colNames=新集合
V=团队名称TBL
出错时继续下一步
对于I=1到UBound(V,1)
如果V(I,1)=蒸汽和V(I,2)”,则_
添加项:=CStr(V(I,2)),键:=CStr(V(I,2))
接下来我
错误转到0
CountTeamMembers=colNames.Count
端函数
如果您真的希望一个公式都在一列中,那么下面输入的数组公式应该可以工作。但您可以从它的复杂性看出为什么我更喜欢VBA解决方案——更易于开发、理解、修改或维护

在公式中,Team是包含团队的单元格范围(例如A2:A9),Name是包含名称的单元格范围(例如B2:B9)假设F2包含感兴趣的团队颜色。如果您在G2中输入公式,然后填充,它将更改为拾取F3;F4等的内容,因此这就是您放置团队颜色的位置。它们必须与团队范围中列表中的颜色完全相同

特别是因为你想把公式放在一张单独的纸上,我强烈建议你使用定义好的范围名称。这将稍微降低公式的复杂性

此公式必须是输入的数组

Option Explicit
Function CountTeamMembers(TeamNameTbl As Range, sTeam As String) As Long
Dim colNames As Collection
Dim V As Variant
Dim I As Long
Set colNames = New Collection
V = TeamNameTbl
On Error Resume Next
For I = 1 To UBound(V, 1)
    If V(I, 1) = sTeam And V(I, 2) <> "" Then _
        colNames.Add Item:=CStr(V(I, 2)), Key:=CStr(V(I, 2))
Next I
On Error GoTo 0
CountTeamMembers = colNames.Count
End Function
=SUM(IF(频率)(IF(团队=F2,IF(LEN(Name)>0,Name))FALSE,MATCH(团队=F2,IF(LEN(Name)>0,Name)),IF(团队=F2,IF(LEN(Name)>0,Name)),0),“”),IF(团队=F2,IF(LEN(Name)>0,Name))FALSE,MATCH(团队=F2,IF(LEN(Name)>0,Name)),IF(团队=F2,IF(LEN(Name)>0,Name)),0,1))
数组,请在输入后输入公式 将公式输入单元格或公式栏,按住 ctrl+shift同时点击输入。如果您这样做 正确地说,Excel将在公式周围放置大括号。

在第2页的单元格B1(其中“红色”在单元格A1中,“蓝色”在单元格A2中,等等),使用此公式并向下复制:

=SUM(IF(FREQUENCY(IF(IF(Team=F2,IF(LEN(Name)>0,Name))<>FALSE,MATCH(IF(Team=F2,IF(LEN(Name)>0,Name)),IF(Team=F2,IF(LEN(Name)>0,Name)),0),""), IF(IF(Team=F2,IF(LEN(Name)>0,Name))<>FALSE,MATCH(IF(Team=F2,IF(LEN(Name)>0,Name)),IF(Team=F2,IF(LEN(Name)>0,Name)),0),""))>0,1))
=SUMPRODUCT(--(Sheet1!A$2:$A$9=A1),(Sheet1!B$2:$B$9“”)/COUNTIF(Sheet1!B$2:$B$9,Sheet1!B$2:$B$9&“”)

根据需要调整Sheet1范围。

我尝试了这个方法并得到了#值。还有其他方法吗?我正在尝试计算满足成为特定团队颜色一部分条件的姓名数量,并将总数放在Excel手册中的另一张表上。我很欣赏这个建议,但我不熟悉Visual Basic Editor.Jus如果你不想使用VBA(我的答案中有一些指示,如果你严格遵循,应该会告诉你如何输入),那么我会把你的注意力转移到chris的解决方案上。如果两个不同的团队中有同名的人,你的公式会返回意想不到的结果(小数)。非常感谢!这非常有效!没问题&甚至比数组更简单。
=SUM(IF(FREQUENCY(IF(IF(Team=F2,IF(LEN(Name)>0,Name))<>FALSE,MATCH(IF(Team=F2,IF(LEN(Name)>0,Name)),IF(Team=F2,IF(LEN(Name)>0,Name)),0),""), IF(IF(Team=F2,IF(LEN(Name)>0,Name))<>FALSE,MATCH(IF(Team=F2,IF(LEN(Name)>0,Name)),IF(Team=F2,IF(LEN(Name)>0,Name)),0),""))>0,1))
=SUMPRODUCT(--(Sheet1!$A$2:$A$9=A1),(Sheet1!$B$2:$B$9<>"")/COUNTIF(Sheet1!$B$2:$B$9,Sheet1!$B$2:$B$9&""))