基本上,我有N行,每个唯一值始终重复3次。这是col_1。然后,我要重复一系列值,因为col_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。接下来,我们需要将它们变成单元格。我们将结合使用SPLIT和TRANSPOSE。
TRANSPOSE(SPLIT(REPT(CONCATENATE(C2:C4&"~"),COUNTA(UNIQUE(A2:A500))),"~"))
我们将字符串从“〜”中分离出来,因此最终得到一个看起来像[d,e,f,d,e,f,d,e,f]的数组。然后,我们需要对其进行转置以将其变成行而不是列。
最后一部分是将所有内容包装到arrayformula中,因此该公式确实起作用。
=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
现在,每次向col_1添加新的唯一值时,都会添加三个新值
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句