【问题标题】:Excel DROP function unexpected behaviourExcel DROP 函数意外行为
【发布时间】:2023-01-16 17:36:49
【问题描述】:

在为这个问题Insert row to separates group of data with header 获取公式解决方案时,我尝试从溢出结果中删除第一行和最后一行。

这是使用的数据:

column A column B column C
row 1 pos item qty
row 2 p1 hat 2
row 3 p3 cap 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 无法在同一计算中引用它吗?

【问题讨论】:

    标签: excel excel-formula excel-365 spill-range


    【解决方案1】:

    新数组函数在传递一个时表现出不同行为的另一个例子大批范围.

    看起来,在某些结构中,这些函数的行为类似于 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),即{4,5,6;7,8,9}=DROP(SEQUENCE(3,3),-1),即@987654335 @,这将需要第三个维度,尽管 Excel 从未能够存储超过两个维度的内部数组。

    【讨论】:

      猜你喜欢
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多