Ben*_*ott 2 excel sum excel-formula countif
我有一个专栏,其中包含在不同日期参加过活动的不同工作人员。有时只有一个人参加,有时则有多人参加。我希望能够计算出每个员工参加的次数。我已经尝试过了COUNTIF(),但是这不适用于多人参加的情况。
| 工作人员出席 |
|---|
| 本 |
| 约翰 |
| 戴夫 |
| 标记 |
| 本、约翰 |
| 马克、约翰 |
| 本和戴夫 |
| 马克和约翰 |
在上表中,我希望能够计算出每个员工参加的次数。
我提前道歉,我确信这个问题有时被问到并得到回答,但我可能缺乏对语法以及如何表达我的查询的认识。
假设没有Excel Constraints按照发布的标签,那么可以使用GROUPBY()当前可用的,MS365 Beta Channel然后以下应该可以工作。
=LET(
_StaffAttending, TOCOL(TEXTSPLIT(TEXTAFTER(", "&SUBSTITUTE(A2:A9," &",","),", ",SEQUENCE(,10)),", "),2),
GROUPBY(_StaffAttending,_StaffAttending,COUNTA,0,0))
Run Code Online (Sandbox Code Playgroud)
为了让事情更清楚,上面的公式可以扩展到更多步骤:
=LET(
_SameDelimiters, SUBSTITUTE(A2:A9," &",","),
_CountDelimiters, LEN(_SameDelimiters)-LEN(SUBSTITUTE(_SameDelimiters,", ",)),
_Instance_Num, SEQUENCE(,MAX(_CountDelimiters)),
_SplitByRow, TOCOL(TEXTSPLIT(TEXTAFTER(", "&_SameDelimiters,", ",_Instance_Num),", "),2),
_Output, GROUPBY(_SplitByRow,_SplitByRow,COUNTA,0,0),
_Output)
Run Code Online (Sandbox Code Playgroud)
或者,使用MMULT()与上面相同的步骤,但它用于MMULT()通过两个数组的矩阵乘法来获取数字计数。
=LET(
_StaffAttending, TOCOL(TEXTSPLIT(TEXTAFTER(", "&SUBSTITUTE(A2:A9," &",","),", ",SEQUENCE(,10)),", "),2),
UNIQUE(HSTACK(_StaffAttending, MMULT(N(_StaffAttending=TOROW(_StaffAttending)),SEQUENCE(ROWS(_StaffAttending),,,0)))))
Run Code Online (Sandbox Code Playgroud)
或者,使用POWER QUERY在这里会更合适,因为它可以处理相当多的数据集,因此要使用上述过程实现此目的,请使用POWER QUERYwindow遵循以下简单步骤UI:
Table_1let
Source = Excel.CurrentWorkbook(){[Name="Table_1"]}[Content],
#"Replaced Value" = Table.ReplaceValue(Source," &",",",Replacer.ReplaceText,{"Staff attending"}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Replaced Value", {{"Staff attending", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Staff attending"),
#"Trimmed Text" = Table.TransformColumns(#"Split Column by Delimiter",{{"Staff attending", Text.Trim, type text}}),
#"Grouped Rows" = Table.Group(#"Trimmed Text", {"Staff attending"}, {{"Count", each Table.RowCount(_), Int64.Type}})
in
#"Grouped Rows"
Run Code Online (Sandbox Code Playgroud)
但是,也可以使用COUNTIFS()或COUNTIF()使用来完成此操作wildcard operator *,如果手动列出员工姓名,则
=COUNTIF($A$2:$A$9,"*"&C2:C5&"*")
Run Code Online (Sandbox Code Playgroud)
要列出参加的员工的唯一姓名,可以使用:
=UNIQUE(TOCOL(TEXTSPLIT(TEXTAFTER(", "&SUBSTITUTE(A2:A9," &",","),", ",SEQUENCE(,10)),", "),3))
Run Code Online (Sandbox Code Playgroud)
发布的所有上述解决方案都没有使用任何LAMBDA()迭代,也没有使用TEXTJOIN()函数,并且特别避免后者的原因是,因为所述函数有字符限制,如果超过限制将呈现#VALUE!错误。我们不知道数据集有多大,也不知道数据集是否有全名或只有名字。但是,发布作为替代方案:
=LET(
_Split, TEXTSPLIT(TEXTJOIN("|",,A2:A9),,{"|",", "," & "}),
GROUPBY(_Split, _Split, COUNTA,,0,))
Run Code Online (Sandbox Code Playgroud)
或者,
=LET(
_Split, TEXTSPLIT(TEXTJOIN("|",,A2:A9),,{"|",", "," & "}),
PIVOTBY(_Split,, _Split, COUNTA,,0,))
Run Code Online (Sandbox Code Playgroud)
或者,
=LET(
_Split, TEXTSPLIT(TEXTJOIN("|",,A2:A9),,{"|",", "," & "}),
UNIQUE(HSTACK(_Split,MMULT(N(_Split=TOROW(_Split)),SEQUENCE(ROWS(_Split),,,0)))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |