如何在 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)
另一种方法是使用 IF
和 SEQUENCE
:
=ARRAYFORMULA(IF(SEQUENCE(4),C1))
在序列出现之前,有ROW
:
=ARRAYFORMULA(IF(ROW(A1:A4),C1))
范围 A1:A4
提供 1 到 4 的序列。
我使用 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)
另一种方法是使用 IF
和 SEQUENCE
:
=ARRAYFORMULA(IF(SEQUENCE(4),C1))
在序列出现之前,有ROW
:
=ARRAYFORMULA(IF(ROW(A1:A4),C1))
范围 A1:A4
提供 1 到 4 的序列。