Google sheets 如何在Google工作表中重复N次行范围

Google sheets 如何在Google工作表中重复N次行范围,google-sheets,Google Sheets,基本上,我有N行,其中一个唯一值总是重复三次。这是Colu_1。然后我有一系列我想要重复的值,因为列1中有唯一的值。这需要是动态的,因为col_1是从列表自动生成的 col_1 | values ------- ------ a | d a | e a | f b | b | b | c | c | c | 这就是我想要的结局: col

基本上,我有N行,其中一个唯一值总是重复三次。这是Colu_1。然后我有一系列我想要重复的值,因为列1中有唯一的值。这需要是动态的,因为col_1是从列表自动生成的

col_1 |        values
-------        ------
  a   |           d
  a   |           e
  a   |           f
  b   |
  b   |
  b   |
  c   |
  c   |
  c   |
这就是我想要的结局:

col_1 |  col_2
----------------
  a   |    d
  a   |    e
  a   |    f
  b   |    d
  b   |    e
  b   |    f
  c   |    d
  c   |    e
  c   |    f

编辑:作为注释中的一个注释,我的数据是完全动态的,所以我不能对将有多少行进行任何假设。在这里,我有一个[a,b,c]列表,乘以值中项目的次数,因此[a,b,c]&[d,e,f]结果为9行。如果我在[d,e,f]上加上“g”,我就有12行,如果我在[a,b,c]上加上“h”,我就有16行。动态部分在这里很重要。

所以我想回答我自己的问题,因为我花了太长时间寻找答案,但找不到答案,所以我自己就想出了一个。答案是:

=ArrayFormula(TRANSPOSE(SPLIT(REPT(CONCATENATE(C2:C4&"~"),COUNTA(UNIQUE(A2:A500))),"~")))
您可以复制并更改其工作范围,但让我解释一下它是如何工作的

首先,我们使用CONCATENATE将要重复的值组合成一个字符串。这三个值在C2:C4范围内定义

CONCATENATE(C2:C4&"~") → "d~e~f~"
~在这里用作分隔符,所以这里没有任何特殊的技巧。接下来,我们重复这个字符串,只要col_1中有唯一的值,我们就重复这个字符串。为此,我们使用COUNTA、UNIQUE和REPT的组合

COUNTA(UNIQUE(A2:A500)) ← Count how many unique occurrences there are in a range ( 3 )

REPT(CONCATENATE(C2:C4&"~"),COUNTA(UNIQUE(A2:A500))

Basically this is converted into:
REPT("d~e~f~",3) → "d~e~f~d~e~f~d~e~f~"
现在我们有了我们想要的任意多的d,e和f。接下来我们需要把它们变成细胞。我们将结合使用拆分和转置来实现这一点

TRANSPOSE(SPLIT(REPT(CONCATENATE(C2:C4&"~"),COUNTA(UNIQUE(A2:A500))),"~"))
我们将字符串从“~”中拆分出来,这样我们将得到一个类似于[d,e,f,d,e,f,d,e,f]的数组。然后我们需要将它转换为行而不是列

最后一部分是将所有内容封装到一个数组公式中,因此该公式实际上是有效的

=ArrayFormula(TRANSPOSE(SPLIT(REPT(CONCATENATE(C2:C4&"~"),COUNTA(UNIQUE(A2:A500))),"~")))
现在,阵列将如下所示:

col_1 |  col_2
----------------
  a   |    d
  a   |    e
  a   |    f
  b   |    d
  b   |    e
  b   |    f
  c   |    d
  c   |    e
  c   |    f

现在,每当您向列1添加一个新的唯一值时,都会添加三个新值

,因此我想回答我自己的问题,因为我花了太多时间寻找答案,但找不到答案,所以我自己就想出了一个。答案是:

=ArrayFormula(TRANSPOSE(SPLIT(REPT(CONCATENATE(C2:C4&"~"),COUNTA(UNIQUE(A2:A500))),"~")))
您可以复制并更改其工作范围,但让我解释一下它是如何工作的

首先,我们使用CONCATENATE将要重复的值组合成一个字符串。这三个值在C2:C4范围内定义

CONCATENATE(C2:C4&"~") → "d~e~f~"
~在这里用作分隔符,所以这里没有任何特殊的技巧。接下来,我们重复这个字符串,只要col_1中有唯一的值,我们就重复这个字符串。为此,我们使用COUNTA、UNIQUE和REPT的组合

COUNTA(UNIQUE(A2:A500)) ← Count how many unique occurrences there are in a range ( 3 )

REPT(CONCATENATE(C2:C4&"~"),COUNTA(UNIQUE(A2:A500))

Basically this is converted into:
REPT("d~e~f~",3) → "d~e~f~d~e~f~d~e~f~"
现在我们有了我们想要的任意多的d,e和f。接下来我们需要把它们变成细胞。我们将结合使用拆分和转置来实现这一点

TRANSPOSE(SPLIT(REPT(CONCATENATE(C2:C4&"~"),COUNTA(UNIQUE(A2:A500))),"~"))
我们将字符串从“~”中拆分出来,这样我们将得到一个类似于[d,e,f,d,e,f,d,e,f]的数组。然后我们需要将它转换为行而不是列

最后一部分是将所有内容封装到一个数组公式中,因此该公式实际上是有效的

=ArrayFormula(TRANSPOSE(SPLIT(REPT(CONCATENATE(C2:C4&"~"),COUNTA(UNIQUE(A2:A500))),"~")))
现在,阵列将如下所示:

col_1 |  col_2
----------------
  a   |    d
  a   |    e
  a   |    f
  b   |    d
  b   |    e
  b   |    f
  c   |    d
  c   |    e
  c   |    f

现在,每当您向Colu_1添加一个新的唯一值时,都会添加三个新值

由于用户的帖子,我们在谷歌产品论坛上发现了一个新功能。该函数称为flatte()

在您的场景中,这应该是可行的:


=ARRAYFORMULA(查询(拆分(展平(A2:A&“|”和转置(C2:C4)),“|”,0,0),“where Col1”“”)

由于用户的帖子,我们在谷歌产品论坛上发现了一个新功能。该函数称为flatte()

在您的场景中,这应该是可行的:


=ARRAYFORMULA(查询(拆分(展平(A2:A&“|”和转置(C2:C4)),“|”,0,0),“where Col1”“”)

这样做的原因通常与“取消激活”数据有关。有一种比这里的公式更有效的方法,但为了演示它,我需要一个示例表,其中显示一些原始数据结构示例,然后是“重组”的目标。我确实认为,花点时间整理一份样本表是值得的……@MattKing事实是,我拥有的数据完全是动态生成的,因此没有任何“数据”可以“取消”我的数据。你在这里看到的正是我所拥有的。[A,b,c]的列表乘以值中项目的数量,因此[A,b,c]&[d,e,f]将产生9行。如果我在[d,e,f]上加上“g”,我就有12行,如果我在[a,b,c]上加上“h”,我就有16行。动态部分是这里的重要部分。想要这样做的原因通常与“取消激励”数据有关。有一种比这里的公式更有效的方法,但为了演示它,我需要一个示例表,其中显示一些原始数据结构示例,然后是“重组”的目标。我确实认为,花点时间整理一份样本表是值得的……@MattKing事实是,我拥有的数据完全是动态生成的,因此没有任何“数据”可以“取消”我的数据。你在这里看到的正是我所拥有的。[A,b,c]的列表乘以值中项目的数量,因此[A,b,c]&[d,e,f]将产生9行。如果我在[d,e,f]上加上“g”,我就有12行,如果我在[a,b,c]上加上“h”,我就有16行。动态部分是这里的重要部分。