如何在 Google SpreadSheet 中使范围重复 n 次

How to make a range repeat n-times in Google SpreadSheet

我使用 ArrayFormula() 来简化我创建报告的方式。

我不必在每个单元格中创建引用(例如 =C1=C2=C3=C4,我只需使用 =arrayformula(C1:C4) 在一个单元格中。它做完全相同的工作,但更简单并且使事情更有条理,因为我只需要在一个单元格中查找可能的错误。

当我必须将一个范围引用到另一个范围时,它非常有效,例如将 C1:C4 的值放入 A1:A4 范围。在 A1 单元格中,我只写 =arrayformula(C1:C4),它就发挥了它的魔力。

当范围长度不同时,它确实会变得有点棘手,但它仍然是可行的。例如,如果我想在 B1:B3 之上堆叠两个或更多范围 link C1:C4,在单元格 A1 上我可以写 =arrayformula({C1:C4;B1:B3}).

我的问题是使用 arrayFormula() 复制重复模式。例如,如果我想复制单元格 C1 的内容 4 次,我会使用 =arrayformula({C1;C1;C1;C1}).

这会起作用并且会达到预期的效果。但是,我想知道是否有更好的方法来做到这一点。像 =arrayformula({C1}*12) 这样的模式会重复 12 次。这也将使我能够拥有一个动态公式,例如 =arrayformula({C1}*count(D:D)) 其中模式将根据某个变量重复。

您是否知道如何仅使用原生公式(没有 javascript)实现该目标?

我会使用 split() 函数而不是 arrayformula() 和 rept() 函数来重复单元格位置。例如,如果您的 n=4,公式将如下所示:

=split(rept(C1&";",4),";")

rept() 将单元格位置 C1+分号重复四次以创建一个字符串,而 split() 函数将创建的字符串按分号划分为水平单元格。

您可以使用 transpose() 函数将结果水平 table 旋转为垂直 table:

=transpose(split(rept(C1&";",4),";"))

是的,您可以使用它在 arrayformula() 函数的帮助下创建动态公式:

=arrayformula(count(D:D)*split(rept(C1&";",4), ";"))
=arrayformula(count(D:D)*split(rept(C1&";",4), ";"))

当 C1 包含文本值时,此方法将不起作用。

我想出了一个变体来动态重复/填写与另一列的内容一致的文本值:

=arrayformula(transpose(split(rept("TEXT|",counta(D:D)), "|")))

对于N行M列的字符串text:

=ARRAYFORMULA("text"&T(SEQUENCE(N_rows,M_columns)))

对于N行M列的数字123:

=ARRAYFORMULA(123+0*SEQUENCE(N_rows,M_columns))

我认为您要查找的公式是零步序列。

=sequence(12,1,3,0)

要使其动态化,只需将行数设为变量即可。

=sequence(count(d:d),1,3,0)

另一种方法是使用 IFSEQUENCE:

=ARRAYFORMULA(IF(SEQUENCE(4),C1))

在序列出现之前,有ROW:

=ARRAYFORMULA(IF(ROW(A1:A4),C1))

范围 A1:A4 提供 1 到 4 的序列。