我有3 列输入信息(A、B、C),如下图所示,每列有 10 个变量

现在我想排列A 列的每个变量对应于 B 和 C 列的每个变量,输出将类似于右表

(输入信息和预期输出的图像)

结果将显示为 10*10*10 = 1000 行。

有没有办法使用 Excel 命令导出如右图所示的输出表?每列中变量的数量不会改变,但名称可能会改变,因此需要使用excel命令。非常感谢!

我还没有想到什么解决办法。有人建议使用 Index Match – 但我不知道如何使用,因为我认为 Index Match 只是 V-Hlookup 的升级版本。

我不是编程专家,只是偶尔使用 Excel,所以请尽可能使用简单的语言。谢谢你!

9

  • 3
    您忘记发布解决此问题的尝试。


    – 

  • 3
    SO 不是免费的编码服务……


    – 


  • 1
    这个概念称为“unpivot”——与制作数据透视表相反。尝试寻找一种逆透视方法来帮助您入门。


    – 

  • 1
    在此处快速搜索[excel] unpivot 数据


    – 

  • 1
    尝试:=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}),"|")))


    – 


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。这是水平重复list110次。

此 YouTube 视频中的详细信息: