如何按50米间隔拆分START/FINISH列并关联对应SPEED值
解决方案
问题分析
你当前的公式无法完整生成所需结果,核心问题在于:
- 计算拆分次数时未对小数结果向上取整,导致遗漏超出
FINISH的下一个50米节点 - 未同步生成对应重复的
SPEED值
修正后的公式
假设原始数据在A(START)、B(FINISH)、C(SPEED)列,在D列生成INTERVAL,E列生成对应SPEED:
1. 生成INTERVAL列(D2单元格)
=ARRAYFORMULA(FLATTEN(IF(A2:A<>"", FLOOR(A2:A,50) + SEQUENCE(1, CEILING((B2:B - FLOOR(A2:A,50))/50) + 1, 0, 50), "")))
FLOOR(A2:A,50):将START向下取整到最近的50米倍数,保证生成的INTERVAL都是50的整数倍CEILING((B2:B - FLOOR(A2:A,50))/50):计算从取整后的起点到FINISH需要拆分的50米段数,向上取整确保覆盖到超出FINISH的下一个50米节点SEQUENCE生成0、50、100...的序列,与取整后的起点相加得到完整的INTERVAL节点
2. 生成对应SPEED列(E2单元格)
=ARRAYFORMULA(FLATTEN(IF(A2:A<>"", C2:C * SEQUENCE(1, CEILING((B2:B - FLOOR(A2:A,50))/50) + 1, 1, 0), "")))
- 通过
SEQUENCE(1, ..., 1, 0)生成全1的序列,与SPEED相乘实现重复对应次数的效果,确保每个INTERVAL节点匹配正确的SPEED
结果验证
针对你的示例数据:
- 第一行(0,123,20)会生成
0,50,100,150,对应20,20,20,20 - 第二行(123,363,60)会生成
100,150,200,250,300,350,400,对应60,60,60,60,60,60,60
若需要避免重复的INTERVAL节点(比如150同时出现在两行结果中),可以额外添加去重逻辑:
=ARRAYFORMULA(UNIQUE(FLATTEN(IF(A2:A<>"", FLOOR(A2:A,50) + SEQUENCE(1, CEILING((B2:B - FLOOR(A2:A,50))/50) + 1, 0, 50), ""))))
再用VLOOKUP匹配对应的SPEED(取每个节点对应的最后一个SPEED值):
=ARRAYFORMULA(VLOOKUP(D2:D, {FLATTEN(IF(A2:A<>"", FLOOR(A2:A,50) + SEQUENCE(1, CEILING((B2:B - FLOOR(A2:A,50))/50) + 1, 0, 50), "")), FLATTEN(IF(A2:A<>"", C2:C * SEQUENCE(1, CEILING((B2:B - FLOOR(A2:A,50))/50) + 1, 1, 0), ""))}, 2, FALSE))
内容的提问来源于stack exchange,提问作者Aaron Parrilla
相关产品推荐
相关产品推荐

