连续获取最后5个非零值


0

我有一个很大的电子表格,其中有很多行,其中的数据可以有零和正/负值,但可以是所有数值。我想写一个公式(或五个公式,如果需要的话)告诉我每行的最后五个非零值是什么。

示例(一行数据):1-5-0-8-10-0-7-0-3-4

在上面的示例数据中,理想情况下,一个或多个公式将返回:4-3-7-10-8

竭尽全力帮助您,对此我深表感谢。

-谢谢


AFAIK,您不能使用公式来执行此操作。您最好在VBA中编写自己的公式并使用它。
DarkMoon 2014年

谢谢@DarkMoon-我开始思考同样的事情...我能够使用嵌套的if语句提取最终的非零值,但是获取第二,第三,第四和第五值似乎很棘手
wheel88

@XOR LX,这就是AFAIK的意思;“据我所知”,以免不确定。很高兴听到它可以做到;我从未听说过数组公式,因此必须对其进行研究。
DarkMoon 2014年

@DarkMoon啊,真心的道歉!我必须学习一些这些东西!已删除评论。
XOR LX 2014年

Answers:


0

您可以使用公式和几个辅助数组来完成此操作。假设您的数据位于A到J列,从第1行开始。将L到P列用于五个结果。R到AA列是第一个辅助数组,AC到AL列是第二个辅助数组。您可以隐藏帮助程序数组或将其移动到其他位置(只需调整列引用计算)。

让我们从第一个帮助器数组开始。Excel具有从左到右运行的所有功能,但没有从右到左运行的功能(除非您使用的是以色列版本:-))。第一个辅助数组只是反转数据的顺序。单元格R1将包含:

    =OFFSET($A1,0,27-COLUMN(), )

将此复制到单元格S1到AA1。

第二个辅助数组确定非零值的位置和序列号。单元AC1包含:

    =IF(R1=0,"",COLUMN()-28-COUNTIF($R1:R1,0))

将此复制到AL到AD列。

现在获取结果值。在L1中输入以下公式,然后通过P1复制到M1:

    =INDEX($R1:$AA1, ,MATCH(1,$AC1:$AL1,0))

编辑M至P公式,将MATCH函数中的搜索参数替换为2至5,因此M至P公式为:

    =INDEX($R1:$AA1, ,MATCH(2,$AC1:$AL1,0))
    =INDEX($R1:$AA1, ,MATCH(3,$AC1:$AL1,0))
    =INDEX($R1:$AA1, ,MATCH(4,$AC1:$AL1,0))
    =INDEX($R1:$AA1, ,MATCH(5,$AC1:$AL1,0))

现在,可以根据需要将所有公式向下复制到工作表中。


1

假设您的值在A1:J1中,则此数组公式**在L1中:

=INDEX($A1:$J1,LARGE(IF($A1:$J1<>0,COLUMN($A1:$J1)-MIN(COLUMN($A1:$J1))+1),COLUMNS($A:A)))

在右侧再复制4列。

也可以将其复制下来,以对A2:J2,A3:J3等中的数据提供相似的结果。

问候

**数组公式的输入方式与“标准”公式的输入方式不同。首先按住CTRL和SHIFT,然后再按Enter,而不是仅按ENTER。如果操作正确,您会注意到Excel在公式周围使用大括号{}(尽管不要尝试自己手动插入大括号)。


也谢谢@ XOR-LX,此解决方案也很好用!
wheel88 2014年

我真的很喜欢这个公式+1的紧凑性。我将在单元格R1中添加以下公式,以将结果转换为OP中要求的格式:=L1&"-"&M1&"-"&N1&"-"&O1&"-"&P1
Clif 2014年

@Clif谢谢,您的建议看起来很有价值。
XOR LX
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.