我有3 列输入信息(A、B、C),如下图所示,每列有 10 个变量。
现在我想排列A 列的每个变量对应于 B 和 C 列的每个变量,输出将类似于右表
结果将显示为 10*10*10 = 1000 行。
有没有办法使用 Excel 命令导出如右图所示的输出表?每列中变量的数量不会改变,但名称可能会改变,因此需要使用excel命令。非常感谢!
我还没有想到什么解决办法。有人建议使用 Index Match – 但我不知道如何使用,因为我认为 Index Match 只是 V-Hlookup 的升级版本。
我不是编程专家,只是偶尔使用 Excel,所以请尽可能使用简单的语言。谢谢你!
9
4 个回答
4
=INDEX(A2:C11,MOD(ROUNDUP(SEQUENCE(1000)/{100,10,1},)-1,10)+1,{1,2,3})
这将创建一个 1000 的序列,在第一列中除以 100,在第二列中除以 10,在最后一列中除以 1。最后一列用 MOD 包裹,不超过 10。
您可能需要根据需要更改单元格引用
2
-
1或者非常字面意思:
={"Exp country","Hub","Imp country"}&" "&MOD(ROUNDUP(SEQUENCE(1000)/{100,10,1},)-1,10)+1
– -
1杰出的!对于任意数量的行和列:
=LET(data,A2:C11,r,ROWS(data),c,COLUMNS(data),INDEX(data,MOD(ROUNDUP(SEQUENCE(r^c)/r^SEQUENCE(,c,c-1,-1),)-1,r)+1,SEQUENCE(,c)))
.
–
|
这是执行此操作的另一种方法以及您可能正在寻找的输出:
结果将显示为
10*10*10
=1000 rows
。
• 单元格中使用的公式E1
=LET(a,A2:C11,VSTACK(Tbl_1[#Headers],TEXTSPLIT(TEXTAFTER(
REDUCE("",SEQUENCE(COLUMNS(a)),LAMBDA(x,y,
TOCOL(x&"|"&TOROW(INDEX(a,,y),1)))),"|",{1,2,3}),"|")))
|
合并 3 列
使用(与IF/SEQUENCE
类似)
=LET(data,A1:C6,
d,DROP(data,1),
rc,ROWS(d),
rt,rc^2,
sa,TOCOL(IF(SEQUENCE(,rt),TAKE(d,,1))),
sb,TOCOL(IF(SEQUENCE(,rc),
TOCOL(IF(SEQUENCE(,rc),INDEX(d,,2)))),,1),
sc,TOCOL(IF(SEQUENCE(,rt),TAKE(d,,-1)),,1),
VSTACK(TAKE(data,1),HSTACK(sa,sb,sc)))
- I2:
=TOCOL(IF(SEQUENCE(,9),A2:A4))
- J2:
=TOCOL(IF(SEQUENCE(,3),TOCOL(IF(SEQUENCE(,3),B2:B4))),,1)
- K2:
=TOCOL(IF(SEQUENCE(,9),C2:C4),,1)
|
您需要搜索的关键字是“组合”和“笛卡尔积”,我的转到帖子是这个:
你只需要找到list1和list2的所有组合,你就会得到10 * 10行,我们称它们为list_12。然后找到list_12和list3的所有组合,那么你将得到(10*10) * 10行。
要做的是在一个公式中,您可以使用
=LET(
list1, A2:A11,
numList1, ROWS(list1),
list2, B2:B11,
numList2, ROWS(list2),
list3, B2:C11,
numList3, ROWS(list3),
combinedList1, TOCOL(EXPAND("", 1, numList3, "") & TOCOL(EXPAND("", 1, numList2, "") & list1)),
combinedList2, TOCOL(EXPAND("", 1, numList3, "") & TOCOL(EXPAND("", numList1, 1, "") & TOROW(list2))),
combinedList3, TOCOL(EXPAND("", numList1 * numList2, 1, "") & TOROW(list3)),
HSTACK(combinedList1, combinedList2, combinedList3)
)
使用的技术之一是 EXPAND("", 1, numList2, "") & list1
。这是水平重复list1
10次。
此 YouTube 视频中的详细信息:
|
–
–
–
–
=LET(a,A2:C11,VSTACK(Table1[#Headers],TEXTSPLIT(TEXTAFTER(REDUCE("",SEQUENCE(COLUMNS(a)),LAMBDA(x,y,TOCOL(x&"|"&TOROW(INDEX(a,,y),1)))),"|",{1,2,3}),"|")))
–
|