MS Excel - 连接两个结构化表

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

为什么这个公式(有效)显示两个结构化表?

来自 Stackoverflow,Chris Neilsen,2021 年 8 月 15 日

=LET(x, table1, y, table2,
rows1, ROWS(x), rows2, ROWS(y),
myrows, SEQUENCE(rows1+rows2),
mycols, SEQUENCE(1,COLUMNS(x)),
IF(myrows<=rows1, x, INDEX(y, myrows-rows1, mycols)))

就是LET()中的计算步骤:

IF(myrows<=rows1, x, INDEX(y, myrows-rows1, mycols))

这让我很困惑。看来应该产生 x 或 y,而不是两者。 谢谢。

我仔细地研究了公式并独立测试了公式的部分内容。

excel join filter excel-formula
2个回答
1
投票

弄清楚公式如何“滴答”

  • Chris Neilsen 的答案是在

    VSTACK
    函数发布之前发布的,即可以通过以下方式简化:

    =VSTACK(Table1,Table2) 
    
  • 您可以重写公式,例如通过以下方式:

=LET(x, Table1, y, Table2,
rows1, ROWS(x), rows2, ROWS(y),
myrows, SEQUENCE(rows1+rows2),
myrows1, myrows<=rows1,
myrows2, myrows-rows1,
mycols, SEQUENCE(1,COLUMNS(x)),
result, IF(myrows1, x, INDEX(y, myrows2, mycols)),
result)
  • 现在通过将最后一次出现的
    result
    替换为任何其他变量来进行操作。

  • 您还可以在独立公式中返回每个变量(表达式),或仅返回不清楚的变量,例如:


1
投票

该公式基于数字序列

myRows
。如果您在 let 语句中显示该变量,您将看到一个列表,从 1 到两个表的行数之和。

因此,从数字行序列中,它正在评估行数是否超过第一个表中的行数。如果是这样,它将返回第一个表。如果没有,则使用索引在第二个表中查找相应的值。

如果 if 语句通过显示以相同的方式一致地表示每个表,可能会更清楚

IF(myrows<=rows1,
   INDEX(x, myrows, mycols), 
   INDEX(y, myrows-rows1, mycols))`

您可以通过将各种变量放在 let 语句的末尾来输出它们。所以这里是序列变量

myRows

=LET(x, Table1, y, Table2,
rows1, ROWS(x), rows2, ROWS(y),
myrows, SEQUENCE(rows1+rows2),
mycols, SEQUENCE(1,COLUMNS(x)),endResult,
IF(myrows<=rows1,  INDEX(x, myrows, mycols), INDEX(y, myrows-rows1, mycols)),myrows)

也许这个插图有帮助:

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