在 Excel 函数中组合范围而不使用辅助单元
Combining Ranges in Excel Functions with out helper cells
我很难弄清楚如何将正确的数据类型评估为传递给此函数中 Small() 的第一个参数的单个数组。我的总体目标是(完全不使用辅助单元格)将作为数组传递给 Small() 的两组范围组合成二维数组输出。当单独放置在范围内时,公式可以正常工作,但是当组合在 Let() 中时,我会出现类型不一致导致#VALUE!错误作为输出。
这里是 LET() 函数 ...
=LET(
A1v, SEQUENCE(1,10,1,0),
A2v, SEQUENCE(1,10,2,0),
SMALL((A1v,A2v),SEQUENCE(2,COLUMNS(A1v)))
)
当 Let() 公式被分解成多个部分并如下所述放入单独的范围时,它会在 A3:J4 (A3#) 中产生所需的输出,如本
所示
范围A1公式:
=SEQUENCE(1,10,1,0)
范围A2公式:
=SEQUENCE(1,10,2,0)
范围A3公式:
=SMALL((A1#,A2#),SEQUENCE(2,COLUMNS(A1#)))
我知道还有其他函数构造可用于组合范围。我不是在寻找使用 Small() 的替代方法。我正在寻找有助于进一步理解从 Excel 中的新数组函数构造数组并将其用作新数组函数的输入的答案。在此先感谢大家!
您的 Let
函数失败的原因是 Small
的 (A1v,A2v)
参数。该构造是 Ranges 的联合运算符。 A1v
和 A2v
是数组,不是范围。
这可以在公式计算器对话框中看到
相比之下,(A1#,A2#)
有效,因为 A1#
和 A2#
是 范围。
FWIW,Small
本身可以接受范围或数组
要解决此问题,您需要一个通用解决方案来获取两个数据集的并集,无论它们是范围还是数组。这可以使用 Lambda
function.
来实现
将工作簿范围内的名称添加到名称管理器,我们称之为 Union
在引用部分插入
=LAMBDA(tabl1, tabl2,
LET(rowindex, SEQUENCE(ROWS(tabl1)+ROWS(tabl2)),
colindex, SEQUENCE(1,COLUMNS(tabl1)),
IF(rowindex<=ROWS(tabl1),
INDEX(tabl1,rowindex,colindex),
INDEX(tabl2,rowindex-ROWS(tabl1),colindex)
)
)
)
Union
现在可用作独立函数,或嵌入到另一个函数中
你的公式现在变成了
=LET(
A1v, SEQUENCE(1,10,1,0),
A2v, SEQUENCE(1,10,2,0),
SMALL(Union(A1v,A2v),SEQUENCE(2,COLUMNS(A1v)))
)
或没有 Lambda
=LET(
A1v, SEQUENCE(1,10,1,0),
A2v, SEQUENCE(1,10,2,0),
rowindex, SEQUENCE(ROWS(A1v)+ROWS(A2v)),
colindex, SEQUENCE(1,COLUMNS(A1v)),
Av, IF(rowindex<=ROWS(A1v),
INDEX(A1v,rowindex,colindex),
INDEX(A2v,rowindex-ROWS(A1v),colindex),
SMALL(Av,SEQUENCE(2,COLUMNS(A1v))) )
)
未经测试,因此您可能需要稍微调整一下
我很难弄清楚如何将正确的数据类型评估为传递给此函数中 Small() 的第一个参数的单个数组。我的总体目标是(完全不使用辅助单元格)将作为数组传递给 Small() 的两组范围组合成二维数组输出。当单独放置在范围内时,公式可以正常工作,但是当组合在 Let() 中时,我会出现类型不一致导致#VALUE!错误作为输出。
这里是 LET() 函数 ...
=LET(
A1v, SEQUENCE(1,10,1,0),
A2v, SEQUENCE(1,10,2,0),
SMALL((A1v,A2v),SEQUENCE(2,COLUMNS(A1v)))
)
当 Let() 公式被分解成多个部分并如下所述放入单独的范围时,它会在 A3:J4 (A3#) 中产生所需的输出,如本
所示范围A1公式:
=SEQUENCE(1,10,1,0)
范围A2公式:
=SEQUENCE(1,10,2,0)
范围A3公式:
=SMALL((A1#,A2#),SEQUENCE(2,COLUMNS(A1#)))
我知道还有其他函数构造可用于组合范围。我不是在寻找使用 Small() 的替代方法。我正在寻找有助于进一步理解从 Excel 中的新数组函数构造数组并将其用作新数组函数的输入的答案。在此先感谢大家!
您的 Let
函数失败的原因是 Small
的 (A1v,A2v)
参数。该构造是 Ranges 的联合运算符。 A1v
和 A2v
是数组,不是范围。
这可以在公式计算器对话框中看到
相比之下,(A1#,A2#)
有效,因为 A1#
和 A2#
是 范围。
FWIW,Small
本身可以接受范围或数组
要解决此问题,您需要一个通用解决方案来获取两个数据集的并集,无论它们是范围还是数组。这可以使用 Lambda
function.
将工作簿范围内的名称添加到名称管理器,我们称之为
Union
在引用部分插入
=LAMBDA(tabl1, tabl2, LET(rowindex, SEQUENCE(ROWS(tabl1)+ROWS(tabl2)), colindex, SEQUENCE(1,COLUMNS(tabl1)), IF(rowindex<=ROWS(tabl1), INDEX(tabl1,rowindex,colindex), INDEX(tabl2,rowindex-ROWS(tabl1),colindex) ) ) )
Union
现在可用作独立函数,或嵌入到另一个函数中你的公式现在变成了
=LET( A1v, SEQUENCE(1,10,1,0), A2v, SEQUENCE(1,10,2,0), SMALL(Union(A1v,A2v),SEQUENCE(2,COLUMNS(A1v))) )
或没有 Lambda
=LET(
A1v, SEQUENCE(1,10,1,0),
A2v, SEQUENCE(1,10,2,0),
rowindex, SEQUENCE(ROWS(A1v)+ROWS(A2v)),
colindex, SEQUENCE(1,COLUMNS(A1v)),
Av, IF(rowindex<=ROWS(A1v),
INDEX(A1v,rowindex,colindex),
INDEX(A2v,rowindex-ROWS(A1v),colindex),
SMALL(Av,SEQUENCE(2,COLUMNS(A1v))) )
)
未经测试,因此您可能需要稍微调整一下