也许这只是一个漫长的一周,但我无法想到如何获得一个非常简单的平均值。
这是我的数据(两栏):
1/3/1994 1165
1/4/1994 1162
1/5/1994 1133
1/6/1994 1133
1/7/1994 1138
1/10/1994 1143
1/11/1994 1118
1/12/1994 1150
1/13/1994 1171
1/14/1994 1177
1/17/1994 1161
1/18/1994 1162
1/19/1994 1121
1/20/1994 1112
1/21/1994 1129
1/24/1994 1136
1/25/1994 1124
1/26/1994 1118
1/27/1994 1127
1/28/1994 1133
1/31/1994 1088
2/1/1994 1055
2/2/1994 1051
2/3/1994 1071
2/4/1994 1079
2/7/1994 1054
2/8/1994 1079
2/9/1994 1079
2/10/1994 1089
2/11/1994 1074
2/14/1994 1083
2/15/1994 1068
2/16/1994 1075
2/17/1994 1071
正如您所看到的,它是一列日期(一直持续到2015年9月9日,所以它很长),另一个价格。我只是试图获得每年1月份的平均值(即1994年1月,1995年,1996年,2015年,1994年2月等)。
这是我计划使用公式的表格:
2007 2008 2009 2010 2011
January
February
March
April
所以,在" 1月"以及" 2007",我想要2007年1月的平均价格。
我尝试使用它(再次,我的数据从A1和B1开始):
=AverageIfs(B:B,year(A:A),1994,month(A:A),1)
(常规和数组),但它不起作用 - 我一直收到错误"您输入的公式包含错误。" (我真的更喜欢这是一个公式,而不是VB解决方案)
感谢您的任何想法!
编辑:与此同时,我创建了两个辅助列,它们只是每行数据的Month()
和Year()
。然后我可以使用=AverageIfs(B:B,[month helper range],1,[year helper range],2007)
。有没有办法在没有辅助列的情况下执行此操作?
答案 0 :(得分:1)
我不知道这是否是最简洁的解决方案,但它确实有效。您可以按如下方式使用SUMPRODUCT
:
=SUMPRODUCT((MONTH($A:$A)=1)*(YEAR($A:$A)=1994)*$B:$B)/SUMPRODUCT((MONTH($A:$A)=1)*(YEAR($A:$A)=1994))
这实质上是根据两个标准对B列中的值进行求和,然后计算符合条件并除以该数字的行数。
对于每一行,MONTH
和YEAR
条件评估为1(真)或0(假),然后将这两个值乘以列B中的值,得到列B的如果两个条件都为真,则为value;如果一个或两个条件为假,则为0。
答案 1 :(得分:1)
A2 = "1/3/1994"
和B2 = 1165
C1 = "Month"
D1 = "Year"
C2 = =TEXT(A2,"Mmmm")
D2 = =YEAR(A2)
将单元格C2 + D2复制下来......
我把你的新表放在:
H2 = "January"
H3 = "February"
......等等。
I1 = 1994
J1 = 1995
......等等。
I2 = =AVERAGEIFS($B:$B,$C:$C,$H2,$D:$D,I$1)
并在整个表格中复制该公式。
干杯!
答案 2 :(得分:1)
试试这个
=AVERAGE(IF(YEAR(A:A)=1994,IF(MONTH(A:A)=1,B:B,""),""))
作为数组公式输入(CTRL-SHIFT-ENTER)。如果您想将月份用作文本,可以使用
=AVERAGE(IF(YEAR(A:A)=1994,IF(TEXT(A:A,"mmmm")="January",B:B,""),""))
希望有所帮助
答案 3 :(得分:1)
是的,您可以使用AVERAGEIFS()。这比接受的答案快一千倍:
=AVERAGEIFS(B:B,A:A,">="&DATE(1994,1,1),A:A,"<"&DATE(1994,2,1))
你甚至可以通过这种方式来实现更简洁的公式,但我认为这会给非美国用户带来问题,因为他们的日期格式设置:
=AVERAGEIFS(B:B,A:A,">=1/1/94",A:A,"<2/1/94")
答案 4 :(得分:0)