2013-04-28 86 views
8

我现在有类似于以下的Excel工作表(#的表示空白单元格)从过去的3非空单元中的值获取连续

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)) 
+0

+1很好的问题 – whytheq 2013-04-28 11:28:33

+1

不要ü想VBA或NON VBA解决方案? – 2013-04-28 11:31:13

+2

VBA通​​过循环第8列确实可行 - 然后在循环内部,您需要从左向右移动以查找前三个非空白,并且每次都为第8列构建公式或计算总计。我不会写这个,因为我怀疑其他人会使用工作表函数,如果可用的话,这是更简单的路由 – whytheq 2013-04-28 11:31:41

回答

7

这里的另一个问题:

=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/

它标识列从和自空白单元格,总结为零,不要紧多少相互交织。

+2

+1迪克,当然你需要CTRL + SHIFT + ENTER ........ – 2013-04-28 13:36:52

+0

完美迪克,谢谢! – lethalMango 2013-04-28 14:21:00

+0

+ 1 Good One Dick! :) – 2013-04-28 15:19:53

3

如果数据是在A1:G1尝试在H1

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

这个公式
+0

+ 1那么,我会被诅咒!大声笑。我也有一个准备好的公式,但是关键是它不起作用,如果有两个相同的数字...... – 2013-04-28 12:02:52

+0

这似乎在大多数情况下工作,但在A1中使用以下内容:G1我得到58而不是88(30 #25#33##) - 再次,#是空的 – lethalMango 2013-04-28 12:13:11

+0

我从你的例子中假设在这些数字中不会有空格,试试迪克的版本.... – 2013-04-28 13:34:17

2

我知道这里的优点会讨厌这一个。但是,我使用数十万行和数百万个单元格中的数据,而且我更喜欢帮助行,以及任何一天通过Array公式使用复杂公式。因为它会削减计算分数。即使维护工作更多,我也会花费更少的时间来修改公式,然后等待每次数据更改时对数组进行计算(对于我而言,每隔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

1

Newbee戒备。我知道后是旧的但是如果任何人仍然在那里,我渴望得到上迪克提供的式的衍生物帮助由此我想在若干行[在这种情况下2]运行的计数例如

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

最后我想拉过去的三个单元的总和与数字在运行12翻过

[A:L=months of year] by several rows down [1:5=consecutive years]. 

如果任何人都可以阐明我会非常感激。

非常感谢:瑞安