我有一个专栏,其中包含在不同日期参加过活动的不同工作人员。有时只有一个人参加,有时则有多人参加。我希望能够计算出每个员工参加的次数。我尝试过 COUNTIF,但是当超过一个人参加的情况下,这无法解决。
工作人员出席 |
---|
本 |
约翰 |
戴夫 |
马克 |
本、约翰 |
马克,约翰 |
本和戴夫 |
马克和约翰 |
在上表中,我希望能够计算出每个员工参加的次数。
我提前道歉,我确信这个问题有时被问到并得到回答,但我可能缺乏语法意识以及如何表达我的查询
假设根据发布的标签没有
Excel Constraints
,那么可以使用 GROUPBY()
MS365
中目前可用的 Beta Channel
那么以下应该可以工作。
=LET(
_StaffAttending, TOCOL(TEXTSPLIT(TEXTAFTER(", "&SUBSTITUTE(A2:A9," &",","),", ",SEQUENCE(,10)),", "),2),
GROUPBY(_StaffAttending,_StaffAttending,COUNTA,0,0))
或者,使用
MMULT()
=LET(
_StaffAttending, TOCOL(TEXTSPLIT(TEXTAFTER(", "&SUBSTITUTE(A2:A9," &",","),", ",SEQUENCE(,10)),", "),2),
UNIQUE(HSTACK(_StaffAttending, MMULT(N(_StaffAttending=TOROW(_StaffAttending)),SEQUENCE(ROWS(_StaffAttending),,,0)))))
或者,使用
POWER QUERY
在这里会更合适,因为它可以处理相当多的数据集,因此要使用上述过程实现此目的,请使用 POWER QUERY 窗口 UI
遵循以下简单步骤:
Table_1
let
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"