不同的多标准(文本)-Excel 2010/2013
表1 第2页不同的多标准(文本)-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 我已经试着弄明白了,但我无法让它发挥作用(
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&""))