如何通过重复值复制列并降低源数据粒度,匹配图表时间线?
实现单列数据每个值重复N次的公式方案
针对你需要将原始列每个值重复5次、匹配时间线的需求,以下两种方案可以直接实现,比复杂的REDUCE写法更简洁高效:
方案一:INDEX + ROUNDUP 组合(推荐,适合大数据量)
假设原始数据位于A2:A(从第二行开始,第一行为表头),在新列的起始单元格(比如B2)输入以下公式:
=ArrayFormula(INDEX($A$2:$A, ROUNDUP((ROW(B2:B)-ROW(B2)+1)/5, 0)))
原理说明
ROW(B2:B)-ROW(B2)+1:生成从1开始的连续序号,对应新列的每一行位置ROUNDUP(..., 5):将序号除以5后向上取整,确保前5行取原始列第1个值,接下来5行取第2个值,以此类推INDEX($A$2:$A, ...):根据计算出的索引,提取原始列对应位置的值,自动填充整列
方案二:REDUCE + VSTACK + FLATTEN 组合(灵活易扩展)
如果偏好使用REDUCE函数,也可以用以下写法(同样针对A2:A的原始数据):
=FLATTEN(REDUCE("", FILTER(A2:A, A2:A<>""), LAMBDA(acc, val, VSTACK(acc, ARRAYFORMULA(IF(SEQUENCE(5), val))))))
原理说明
FILTER(A2:A, A2:A<>""):过滤原始列中的空行,避免生成无效重复值REDUCE遍历每个有效数据,用VSTACK将之前的结果与当前值重复5次的数组拼接ARRAYFORMULA(IF(SEQUENCE(5), val)):生成包含5个当前值的数组FLATTEN将二维拼接结果转为一维列,得到最终的重复序列
适配Excel的写法
如果使用Excel,动态数组版本可以直接输入:
=INDEX($A$2:$A, ROUNDUP(SEQUENCE(ROWS($A$2:$A)*5)/5, 0))
旧版Excel需按Ctrl+Shift+Enter确认数组公式。
内容的提问来源于stack exchange,提问作者David Alsh
相关产品推荐
相关产品推荐

