Google Sheets按年份统计同客户行内带日期条件的会话模式数量
解决Google Sheets按年份统计客户各模式会话数量的问题
场景说明
你的数据结构是每行对应一个客户,横向多列成对记录「会话日期」和「会议模式」(例如AN列=日期、AO列=模式,AP列=下一个日期、AQ列=下一个模式,以此类推),需要按年份统计该客户每种模式的会话次数。
单个年份+单个模式的统计公式
如果要单独统计某一年某一种模式的数量(比如2022年Virtual模式),可以用SUMPRODUCT函数:
=SUMPRODUCT((YEAR(AN2:CX2)=2022)*(OFFSET(AN2:CX2,0,1)="Virtual"))
- 逻辑说明:
YEAR(AN2:CX2)=2022:筛选该行中所有2022年的日期单元格,返回布尔值数组OFFSET(AN2:CX2,0,1):将日期列向右偏移1列,得到对应的会议模式列- 两个布尔数组相乘后求和,就是同时满足「2022年」和「Virtual模式」的会话数量
如果模式列在日期列左侧(比如模式列=AN,日期列=AO),只需把OFFSET(AN2:CX2,0,1)改成OFFSET(AN2:CX2,0,-1)即可。
一次性统计所有年份+所有模式的汇总
如果要一次性列出该客户所有年份的各模式会话数,推荐用QUERY+FLATTEN组合,把横向的成对数据转成纵向列表后分组统计:
=QUERY(FLATTEN({{YEAR(AN2:CX2); OFFSET(AN2:CX2,0,1)}}), "SELECT Col1, Col2, COUNT(Col2) WHERE Col1 IS NOT NULL GROUP BY Col1, Col2 LABEL Col1 '年份', Col2 '会议模式', COUNT(Col2) '会话数量'")
- 逻辑说明:
{{YEAR(AN2:CX2); OFFSET(AN2:CX2,0,1)}}:把年份数组和对应的模式数组上下拼接成二维数组FLATTEN:将二维数组转成纵向的两列(第一列年份、第二列模式)QUERY:按年份和模式分组,统计每组的数量,并添加表头
适配非相邻列的情况
如果日期列和模式列不是严格相邻的成对结构,直接指定模式列范围即可,比如日期列是AN2:CX2,模式列是AO2:CY2,公式可改为:
=SUMPRODUCT((YEAR(AN2:CX2)=2022)*(AO2:CY2="Virtual"))
内容的提问来源于stack exchange,提问作者ATyInc
相关产品推荐
相关产品推荐

