Excel DROP 函数出现意外行为

P.b*_*P.b 1 excel excel-formula spill-range excel-365

当获得此问题的公式解决方案时,插入行以使用标题分隔数据组,我尝试从溢出结果中删除第一行和最后一行。

这是使用的数据:

A栏 B栏 C栏
第 1 行 位置 物品 数量
第 2 行 p1 帽子 2
第 3 行 p3 3

我开始于

=DROP( 
      REDUCE(0,ROW(A2:C3),LAMBDA(x,y,VSTACK(x,A1:C1,INDEX(A:C,y,),{"","",""}))),
      1)
Run Code Online (Sandbox Code Playgroud)

这给了我以下溢出: 在此输入图像描述

然后,我不仅想删除 REDUCE 函数的起始值,还想删除最后一行,该行始终为空白。

为此我尝试过:

=DROP( 
      REDUCE(0,ROW(A2:C3),LAMBDA(x,y,VSTACK(x,A1:C1,INDEX(A:C,y,),{"","",""}))),. 
      {1,-1})
Run Code Online (Sandbox Code Playgroud)

我期望{1,-1}数组能够完成它(1对于它的第一行和-1最后一行)。然而这导致了:

在此输入图像描述

我无法理解这种行为,所以我在更简单的范围和/或数组上尝试了它:

A1我用过=SEQUENCE(3,3)

我使用了=DROP(A1#,{1,-1})以下结果: 在此输入图像描述

直接做同样的事情:=DROP(SEQUENCE(3,3),{1,-1}),给出了另一个结果: 在此输入图像描述

有点有趣:=DROP(SEQUENCE(3,3),{1,1,1,1,1}) 结果是{4,4,4,4,4}

我知道我可以使用 DROP 两次来获得所需的结果,但我无法解释这种行为。

这是因为数组的第一个参数改变了数组/范围的大小,而 Excel 无法在同一计算中引用它?

Jos*_*ley 5

新数组函数的另一个示例在传递数组范围表现出不同的行为。

看来,在某些结构中,这些函数的行为类似于旧函数,例如OFFSET,当传递工作表范围时,该范围可能需要首先“取消引用”到数组。

例如,对于A1包含=SEQUENCE(3,3),如您的示例所示,=DROP(A1#,{-1,1})返回{#VALUE!,#VALUE!}

然而,例如,使用'取消引用N'该范围,即会=DROP(N(+A1#),{-1,1})产生{1,4}与 相同的结果=DROP(SEQUENCE(3,3),{1,-1})

至于 的结果=DROP(SEQUENCE(3,3),{1,-1}),我不明白你如何期望它返回{4,5,6},因为你实际上要求它同时执行=DROP(SEQUENCE(3,3),1), ie{4,5,6;7,8,9}=DROP(SEQUENCE(3,3),-1), ie {1,2,3;4,5,6},这将需要第三个维度,尽管 Excel 从来没有能力存储内部二维以上的数组。DROP的第二个和第三个参数并非设计为在传递数组时累积使用(如果这是您的意图)。