将“数字”映射到“行”

问题描述 投票:0回答:4

假设我们有以下数据:
enter image description here

我想将数字与行并排放置:
enter image description here

我的理解是代码应该递归地对“数字”列表中的每个单元格执行此操作。
第一个数字映射到“行”数据中的所有行,然后列表中的下一个数字也映射到相同的行,依此类推。

excel vba excel-formula
4个回答
3
投票

如何在power query中进行交叉连接

假设您有桌子:

enter image description here

将它们加载到Power query中

enter image description here

添加自定义列

enter image description here

扩展您的新自定义列

enter image description here

过滤列自定义.R1

enter image description here 选择关闭并加载!

enter image description here


1
投票

enter image description here

此公式返回范围

G2:J7
:

内的值
=LET(r1st, $A$2:$A$4,
     r2nd, $C$2:$E$3,
     cntA, ROWS(r1st),
     cntB, ROWS(r2nd),
     lstA, INDEX(r1st, INT(SEQUENCE(cntA*cntB,,1,1/cntB))),
     lstB, CHOOSEROWS(r2nd,MOD(SEQUENCE(cntA*cntB,,0),cntB)+1),
     HSTACK(lstA,lstB))

我为该范围指定了自定义数字格式

0;-0;;@
,否则 A、C 行以 0 结尾。

我使用@ScottCraner 的这个答案来解决大部分问题:
根据溢出范围内的两个数据集创建笛卡尔积的公式

编辑:
没有自定义数字格式。 也已更新,因此如果范围改变,将会扩展。

=LET(r1st, $A$2:$A$4,
     r2nd, IF($C$2:$E$3=0,"",$C$2:$E$3),
     cntA, ROWS(r1st),
     cntB, ROWS(r2nd),
     lstA, INDEX(r1st, INT(SEQUENCE(cntA*cntB,,1,1/cntB))),
     lstB, CHOOSEROWS(r2nd,MOD(SEQUENCE(cntA*cntB,,0),cntB)+1),
     HSTACK(lstA,lstB))

enter image description here


0
投票

您可以使用 Unpivot2 宏。

首先,准备源表。将数字复制到新位置,然后通过转置复制上面的行(选择 C1:E2,复制,选择 G3,选择性粘贴):

enter image description here

然后选择表格并激活数据透视单元:

enter image description here

运行宏并得到结果:

enter image description here


0
投票

使用 VBA 可以进行就地扩展,但如果可以将结果放置在不同的区域,您可以尝试以下操作:

  • 使用 Microsoft 365
  • A2:XLOOKUP(TRUE, A:A <> "", A:A, , , -1)
    动态包含非空行
=LET(
    nums, A2:XLOOKUP(TRUE, A:A <> "", A:A, , , -1),
    rows_, C2:E3,
    num_row, LAMBDA(acc, num,
        VSTACK(
            acc,
            HSTACK(
                EXPAND(num, ROWS(rows_), , num),
                IF(ISBLANK(rows_), "", rows_)
            )
        )
    ),
    header, EXPAND("", , 1 + COLUMNS(rows_), ""),
    REDUCE(header, nums, num_row)
)

Result

© www.soinside.com 2019 - 2024. All rights reserved.