Excel DROP函数意外行为

42fyovps  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(159)

在获取这个问题Insert row to separates group of data with header的公式解时,我尝试从溢出结果中删除第一行和最后一行。
使用的数据如下:
| | A栏|B栏|C栏|
| - ------|- ------|- ------|- ------|
| * * 第1行**|位置|项目|数量|
| * * 第2行**|第1页|帽子|第二章|
| * * 第3行**|第三页|盖|三个|
我一开始

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

这给了我以下溢出:

然后,我不仅要删除REDUCE函数的起始值,还要删除最后一行,这一行总是空白的。
为此,我尝试过:

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

我期望{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无法从同一计算中引用它吗?

3gtaxfhh

3gtaxfhh1#

新数组函数的另一个示例在传递 arrayrange 时表现出不同的行为。
在某些构造中,这些函数的行为似乎与OFFSET等较早的函数类似,因为当传递工作表范围时,可能需要首先将该范围“dereferenced”为数组。
例如,在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)(即{4,5,6;7,8,9})和=DROP(SEQUENCE(3,3),-1)(即{1,2,3;4,5,6}),这将需要第三维,尽管Excel从来没有能力存储超过两维的内部数组。DROP的第二个和第三个参数不是设计为在传递数组时累积使用的,如果这是您的意图的话。

相关问题