Excel技术需求:统计连续超3天吃苹果的人员次数及日期区间
Excel多人员连续食用水果统计方案
需求说明
- 统计每位人员连续食用某水果超过3天的次数(如Blake在1月5日-9日的连续记录计1次,Mary次数为0),方案需适配多人员、多日期、多水果场景;
- 额外输出每位人员符合条件的连续食用日期区间;
- 修正此前公式标记错误问题:连续天数超4天时,仅在周期最后一天标记计数,避免中间日期误标记导致计数偏差。
前置准备
确保原始数据按姓名→水果→日期升序排序,数据结构示例:
| 姓名 | 日期 | 水果 |
|---|---|---|
| Blake | 2024/1/5 | 苹果 |
| Blake | 2024/1/6 | 苹果 |
| Blake | 2024/1/7 | 苹果 |
| Blake | 2024/1/8 | 苹果 |
| Blake | 2024/1/9 | 苹果 |
| Mary | 2024/1/5 | 苹果 |
方法一:公式法(适合快速处理)
步骤1:计算连续天数
新增辅助列连续天数(列D),输入公式并下拉:
=IF(AND(A2=A1,C2=C1,B2=B1+1),D1+1,1)
- 逻辑:同一人、同一种水果,且日期连续时,天数累加;否则重置为1。
步骤2:标记有效周期结束日
新增辅助列周期结束标记(列E),输入公式并下拉:
=IF(AND(D2>3,OR(A3<>A2,C3<>C2,B3<>B2+1)),1,0)
- 逻辑:仅当连续天数>3,且下一行不属于同一人/同一种水果/日期不连续时,标记为1(即该行为有效周期的最后一天)。
步骤3:统计次数
在汇总表中,使用COUNTIFS统计指定人员+水果的有效次数:
=COUNTIFS(原始数据!A:A,"Blake",原始数据!C:C,"苹果",原始数据!E:E,1)
步骤4:提取日期区间
使用TEXTJOIN结合数组公式(需按Ctrl+Shift+Enter确认)提取区间:
=TEXTJOIN("、",TRUE,IF((原始数据!A:A="Blake")*(原始数据!C:C="苹果")*(原始数据!E:E=1),TEXT(原始数据!B2-原始数据!D2+1,"yyyy/mm/dd")&" - "&TEXT(原始数据!B2,"yyyy/mm/dd"),""))
- 逻辑:找到所有标记为1的行,通过
连续天数反推周期起始日期,合并成起始-结束格式的区间。
方法二:Power Query法(适合大规模/多维度数据)
步骤1:导入数据到Power Query
选中数据区域 → 「数据」选项卡 → 「从表格/区域」导入Power Query编辑器。
步骤2:分组并处理连续日期
- 按
姓名、水果分组,操作:「转换」→ 「分组依据」,分组列选姓名和水果,新列名设为日期列表,操作选「所有行」。 - 展开分组后的
日期列表,添加索引列:「添加列」→ 「索引列」→ 「从0开始」。 - 计算连续日期组:添加自定义列,公式:
[日期] - [索引]
- 逻辑:连续日期与索引的差值固定,相同差值即为同一连续周期。
步骤3:筛选有效周期并提取区间
- 按
姓名、水果、自定义列分组,统计每组的最小日期、最大日期、天数(天数=最大日期-最小日期+1)。 - 筛选出
天数>3的行,添加自定义列合并日期区间:
Text.From([最小日期]) & " - " & Text.From([最大日期])
步骤4:导出结果
关闭Power Query并加载数据到Excel,即可得到每个人员-水果组合的有效次数和对应日期区间。
关键修正说明
此前的错误源于未判断「下一行是否属于同一连续周期」,通过OR(A3<>A2,C3<>C2,B3<>B2+1)条件,确保仅在连续周期的最后一天标记计数,彻底解决连续天数超4天时中间日期误标记的问题,同时适配多人员、多水果的复杂场景。
内容的提问来源于stack exchange,提问作者Devin
相关产品推荐
相关产品推荐

