在 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 的联合运算符。 A1vA2v 是数组,不是范围。

这可以在公式计算器对话框中看到

相比之下,(A1#,A2#) 有效,因为 A1#A2# 范围。

FWIW,Small 本身可以接受范围或数组


要解决此问题,您需要一个通用解决方案来获取两个数据集的并集,无论它们是范围还是数组。这可以使用 Lambda function.

来实现
  1. 将工作簿范围内的名称添加到名称管理器,我们称之为 Union

  2. 在引用部分插入

    =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)
            )
        )
    )
    
  3. Union 现在可用作独立函数,或嵌入到另一个函数中

  4. 你的公式现在变成了

    =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)))     )
    )

未经测试,因此您可能需要稍微调整一下