在Google Sheets中生成带关联ID的扁平化日期序列(无宏)
解决方案
针对你的需求,这里提供两种可直接使用的Google Sheets公式,同时拆解逻辑帮你理解如何关联ID与日期序列:
公式1(带表头,自动累加结果)
=REDUCE({"ID","日期"}, A2:C, LAMBDA(acc, row, LET(id, INDEX(row,1), start, INDEX(row,2), end, INDEX(row,3), IF(start="", acc, VSTACK(acc, HSTACK( REPT(id, end-start+1), SEQUENCE(end-start+1,1,start) ) ) ) ) ) )
逻辑拆解
REDUCE:从表头开始,逐行累加构建最终结果数组INDEX(row,1/2/3):提取当前行的ID、起始日期、结束日期REPT(id, end-start+1):根据日期区间的天数,生成对应次数的ID重复数组SEQUENCE(end-start+1,1,start):生成从起始到结束的连续日期序列HSTACK:将重复的ID数组和日期序列横向拼接,形成当前ID对应的所有ID-日期对VSTACK:把当前行的结果拼接到之前的累加结果中,最终得到完整的扁平化列表
公式2(无表头,更简洁)
=ARRAYFORMULA( SPLIT( FLATTEN( IF(B2:C<>"", A2:A&"|"&SEQUENCE(C2:C-B2:C+1,1,B2:C), "" ) ), "|" ) )
逻辑拆解
SEQUENCE(...):生成每行的日期序列A2:A&"|"&...:将ID与每个日期用|拼接成字符串,比如1|2024-01-01FLATTEN:把所有行的拼接字符串展开成单列SPLIT:用|分割字符串,得到ID和日期两列的扁平化结果
你之前使用的原问题公式只单独生成了日期序列,没有将ID与每个日期绑定,通过上面的拼接/重复ID的方式,就能实现ID与对应日期的一一关联。
内容的提问来源于stack exchange,提问作者Raven A
相关产品推荐
相关产品推荐

