请求生成Excel公式:按日期顺序为指定类别分配编号
生成分类月度递增编号的Excel公式
核心公式(假设日期列是B列,数据从第2行开始)
在C2单元格输入以下公式,下拉填充即可:
=IF(A2="Regular","W","O")&COUNTIFS(A:A,A2,B:B,">="&DATE(YEAR(B2),MONTH(B2),1),B:B,"<="&B2)
公式说明
- 前缀自动匹配:
IF(A2="Regular","W","O")根据A列的类别直接生成对应前缀 - 月度序号计算:
COUNTIFS(A:A,A2,B:B,">="&DATE(YEAR(B2),MONTH(B2),1),B:B,"<="&B2)统计当前行及之前,同类别且日期在当月范围内的记录数,自然实现按日期顺序的递增编号 - 适配动态透视表:公式直接引用整列范围,即使透视表更新导致日期动态变化,也能自动计算新增数据的编号
日期未排序的兼容方案
如果日期列不是按升序排列,需要严格按日期先后分配编号,可改用以下公式:
=IF(A2="Regular","W","O")&RANK.EQ(B2,IF((A:A=A2)*(MONTH(B:B)=MONTH(B2))*(YEAR(B:B)=YEAR(B2)),B:B,""),1)
该公式先筛选出当月同类别所有日期,再对当前日期做升序排名,确保序号完全匹配日期先后顺序。
简化版(Excel 365/2021及以上)
使用LET函数整合变量,提升公式可读性:
=LET( category,A2, currentDate,B2, monthStart,DATE(YEAR(currentDate),MONTH(currentDate),1), prefix,IF(category="Regular","W","O"), seq,COUNTIFS(A:A,category,B:B,">="&monthStart,B:B,"<="¤tDate), prefix&seq )
内容的提问来源于stack exchange,提问作者Bez




