为什么这个公式(有效)显示两个结构化表?
来自 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,而不是两者。 谢谢。
我仔细地研究了公式并独立测试了公式的部分内容。
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
替换为任何其他变量来进行操作。该公式基于数字序列
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)
也许这个插图有帮助: