Google Sheet序列号生成问题:按月份计数+同日期字母后缀
Google Sheet 序列号生成方案(按月份统计+同日期后缀)
修正后的公式
=ARRAYFORMULA( IF( OR(F2:F="", E2:E=""), "", LEFT(F2:F, 2) & "-" & TEXT(E2:E, "YYYY-MM") & "-" & TEXT( BYROW( E2:E, LAMBDA(d, IF( d="", "", COUNT(UNIQUE(FILTER(E$2:d, TEXT(E$2:d, "YYYY-MM")=TEXT(d, "YYYY-MM")))) ) ) ), "000" ) & IF( COUNTIFS(E2:E, E2:E, ROW(E2:E), "<="&ROW(E2:E)) > 1, CHAR(64 + COUNTIFS(E2:E, E2:E, ROW(E2:E), "<="&ROW(E2:E)) - 1), "" ) ) )
公式说明
核心解决点
- 按月份统计日期序号:不再以完整日期为计数维度,改为统计当前日期在对应年月内的唯一出现顺序(比如当月第一个新日期为001,第二个为002)。
- 同日期行添加字母后缀:同一日期的多行,序列号数字部分保持一致,后续行自动追加A、B、C...后缀区分。
各部分拆解
- 空值判断:
OR(F2:F="", E2:E=""),若F列前缀或E列日期为空,返回空值,避免生成无效内容。 - 前缀生成:
LEFT(F2:F, 2)提取F列前两位字符作为序列号前缀。 - 年月格式化:
TEXT(E2:E, "YYYY-MM")将日期转为年-月格式(如2024-03),替代原公式手动拼接的方式,避免10-12月出现010这类错误格式。 - 月份内日期序号计算:
BYROW+LAMBDA逐行处理日期,筛选当前行及以上同年月的所有日期,去重后统计数量,得到该日期在当月的唯一序号。TEXT(..., "000")将序号转为三位数字格式(如1→001,15→015)。
- 同日期后缀处理:
COUNTIFS统计当前行及以上同日期的行数,若行数大于1,通过CHAR(64 + 行数-1)生成A、B、C...后缀(ASCII码中64对应@,加1即为A,以此类推);第一行无后缀。
效果示例
假设F列为AB,E列日期如下:
| E列日期 | 生成的序列号 |
|---|---|
| 2024/3/20 | AB-2024-03-001 |
| 2024/3/20 | AB-2024-03-001A |
| 2024/3/21 | AB-2024-03-002 |
| 2024/3/21 | AB-2024-03-002A |
| 2024/3/21 | AB-2024-03-002B |
| 2024/3/25 | AB-2024-03-003 |
内容的提问来源于stack exchange,提问作者Ferdinand palaspas II
相关产品推荐
相关产品推荐

