我有一个有3列的表:
试试这个:
=ArrayFormula({"Name","Percentage";VLOOKUP(UNIQUE(FILTER(B2:B,B2:B<>"")),{B2:B,ROUND(SUMIF(IF(ROW(B2:B),B2:B),B2:B,C2:C)/SUM(C2:C),2)},{1,2},FALSE)})
将第二列格式化为百分比(Format>数量比;更多格式>自定义数字格式>0%) .
你会注意到包含了三组花括号:{}。每个都包含在整个ArrayFormula
包装内形成某种虚拟数组。
第一组花括号将标题并排放置(以逗号表示),结果放在下面(以分号表示)。
AVLOOKUP
构成下面的结果。
UNIQUE(FILTER(B2:B,B2:B<>""))
是要查找的。这将形成一个垂直列表,其中包含B列中所有唯一的、非空白的条目(即您的姓名)。
上面列表的每个元素都在一个虚拟数组中查找,该虚拟数组由B2:B的所有元素组成,除了C2:C的SUM
的第二列,每个名称除以C2:C的SUM
,ROUND
的小数位数。
从上面的虚数组中,将返回第一列和第二列的结果:{1,2}。
和FALSE
意味着结果不是顺序的,应该为每个名称找到一个精确匹配。
你也可以试试这个:
=QUERY(QUERY({B2:B,C2:C,SEQUENCE(ROWS(B2:B),1,SUM(C2:C),0)},"select Col1,SUM(Col2),Col3 where Col1<>'' group by Col1,Col3",0),"select Col1,Col2/Col3 label Col1'Name',Col2/Col3'Percentage'",1)
Sequence()只是创建一个具有相同值的列,即列C的和。内部查询按Name聚合列C的值。外部查询将这些总和除以总和。