从一行中的最后3个非空白单元格中获取值

时间:2013-04-28 11:15:09

标签: excel vba excel-vba worksheet-function

我目前有一个类似于以下的excel工作表(#代表空白单元格

1   2   3   4   5   6   7
37  21  30  32  25  22  34
#   17  26  28  27  17  31
#   #   #   #   #   #   38
25  23  27  35  33  #   #
27  11  23  #   #   #   #

在第8栏中,我需要最后3个非空白单元格的总和(列数会定期增加)。

我需要实现的一个例子如下:

1   2   3   4   5   6   7       8
37  21  30  32  25  22  34      25+22+34=81
#   17  26  28  27  17  31      27+17+31=75
#   #   #   #   #   #   38      N/A
25  23  27  35  33  #   #       27+35+33=95
27  11  23  #   #   #   #       27+11+23=61

我已经设法与LARGE函数非常接近但显然这只给了我3个最大的,而不是最后3个非空白:

=(LARGE(C3:J3,1)+LARGE(C3:J3,2)+LARGE(C3:J3,3))

4 个答案:

答案 0 :(得分:8)

这是另一个:

=IF(COUNT(A2:G2)<3,"NA",SUM(G2:INDEX(A2:G2,LARGE(COLUMN(A2:G2)*(A2:G2<>""),3))))

来自http://dailydoseofexcel.com/archives/2004/05/03/sum-last-three-golf-scores/

它标识要汇总的列,由于空白单元格为零,因此混合了多少并不重要。

答案 1 :(得分:3)

如果数据在A1:G1中,请在H1

中尝试此公式

=IF(COUNT(A1:G1)>2,SUM(OFFSET(A1,0,MATCH(9.99E+307,A1:G1)-1,1,-3)),NA())

答案 2 :(得分:2)

我知道这里的职业选手会讨厌这个。但是我使用数十万行和数百万个单元格中的数据,而且我更喜欢辅助行,以及任何一天的数组公式的复杂公式。因为它会将计算减少到分数。即使维护工作更多,我花费更少的时间来修复公式,然后等待每次数据更改的数组计算(对我而言,我的数据每10分钟更改一次)因此,每10分钟就有数百万个单元上的数十万个数组根本行不通。所以,这里只是一个替代方案。

=IF(COUNT(A2:G2)<3,"NA",IF(COUNT(E2:G2)=3,SUM(E2:G2),IF(COUNT(D2:G2)=3,SUM(D2:G2),
 IF(COUNT(C2:G2)=3,SUM(C2:G2),IF(COUNT(B2:G2),SUM(B2:G2),IF(COUNT(A2:G2)=3,
 SUM(A2:G2)))))))

如果没有3个值要求和它将返回NA,其他从右到左工作将检查从该单元格到结尾的第一个单元格中有3个数字然后将它相加。

如果您的数据确实涉及更多列,那么您的问题。您可以使用动态范围来清理代码。

另一个有效的非数组公式:

=SUM(IF(COUNT(A2:G2)=3,A2:G2,IF(COUNT(B2:G2)=3,B2:G2,IF(COUNT(C2:G2)=3,C2:G2,
IF(COUNT(D2:G2)=3,D2:G2,IF(COUNT(E2:G2)=3,E2:G2,"NA"))))))

简单地说将总结从最终到目前为止的数量为3。

答案 3 :(得分:1)

Newbee警告:我知道这个帖子已经老了但是如果有人仍然在那里,我很想得到Dick公式的衍生物的帮助,我想在几行上运行计数例   [在这种情况下为2]:

= --home-dir /var/lib/foo-product/gnupg

最终,我试图将最后三个单元格中的数字与12次交叉中的数字相加

IF(COUNT(A1:G2)<3,"NA",SUM(G2:INDEX(A1:G2,LARGE(COLUMN(A1:G2)*(A1:G2<>""),3))))

如果有人能够解决问题,我会非常感激。

非常感谢:Ryan