Google Sheets:统计指定值出现的唯一列数
统计Google Sheets中各值出现的唯一列数
嘿,这个需求我熟!要算出每个值在多少不同的列里出现过(不管同一列里出现多少次都只算1次),我给你两种实用的方法,直接套用就行:
方法1:一键生成完整统计结果(数组公式)
如果你想一次性得到所有值的统计结果,不用手动下拉,可以在空白单元格(比如F1)输入这个公式:
=QUERY(FLATTEN(QUERY(TRANSPOSE(A1:D5),"SELECT COUNT(Col1) WHERE Col1 IS NOT NULL GROUP BY Col1 LABEL COUNT(Col1) ''")), "SELECT Col1, COUNT(Col1) GROUP BY Col1 LABEL Col1 '姓名', COUNT(Col1) '唯一列数'")
公式逻辑拆解:
TRANSPOSE(A1:D5):先把原表格转置,让原来的每一列变成一行,这样我们就能按原列来处理数据- 内层
QUERY:对转置后的每一行(也就是原表格的每一列),统计里面出现的所有值——只要某个值在这一列里出现过,就会被记录一次 FLATTEN:把内层QUERY的结果压成一列,这样每个值会对应它出现过的每一列的记录- 外层
QUERY:对压扁后的列分组计数,最终就得到每个值对应的唯一列数
方法2:分步处理(更易理解)
如果你想更清晰地看到每一步的结果,可以分两步来:
- 提取所有唯一值:在F2单元格输入
=UNIQUE(FLATTEN(A1:D5)),这会把表格里所有不重复的名字提取出来 - 统计每个值的唯一列数:在G2单元格输入这个公式,然后下拉填充到所有唯一值对应的行:
=SUMPRODUCT(--(MMULT(--(A1:D5=F2),SEQUENCE(ROWS(A1:D5),1,1,0))>0))
公式逻辑拆解:
A1:D5=F2:生成一个真假矩阵,每个单元格如果等于当前名字(F2)就是TRUE,否则是FALSE--(...):把真假值转成1和0,方便计算MMULT(..., SEQUENCE(...)):对每一列求和,得到每个列里当前名字出现的次数>0:判断该列是否存在当前名字(只要出现过次数就大于0),得到一列真假值--(...)再转成1和0,最后SUMPRODUCT求和,就是这个名字出现过的唯一列数
用你的例子测试的话,结果完全符合预期:Joe对应1列,Lisa对应3列,Jenny对应2列,Katie和John各对应1列~
内容的提问来源于stack exchange,提问作者Evan Weiner
相关产品推荐
相关产品推荐

