在获取这个问题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无法从同一计算中引用它吗?
1条答案
按热度按时间3gtaxfhh1#
新数组函数的另一个示例在传递 array 或 range 时表现出不同的行为。
在某些构造中,这些函数的行为似乎与
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
的第二个和第三个参数不是设计为在传递数组时累积使用的,如果这是您的意图的话。