如何获取Excel中与另一列对应的值的平均值

时间:2018-01-27 23:43:32

标签: excel average vlookup

我有一组excel数据如下;

A   B        C      D   E

0   0   0.510678961 3   1
0   1   0.582611161 15  1
0   2   0.274447714 2   1
0   3   0.258144341 2   1
0   4   0.574404811 11  1
0   5   0.330260801 2   1
0   6   0.252972823 2   1
0   7   0.536704433 2   1
0   8   0.563287425 2   1
0   9   0.469793466 32  1
0   10  0.504253272 5   1
0   11  0.509408549 36  4
0   12  0.539940366 54  1
0   13  0.472334971 6   1
0   14  0.423524875 2   1
0   15  0.254872928 13  1
0   16  0.231080412 8   1
0   17  0.39818992  22  1
0   18  0.545173384 4   1
0   19  0.280489713 9   1
0   20  0.280509697 6   1
0   21  0.560193886 6   1
0   22  0.485332134 8   2
0   23  0.481483179 3   1
0   24  0.496115634 29  4
0   25  0.466198213 2   1
0   26  0.552777113 5   1
0   27  0.240848653 6   1
0   28  0.30456948  17  2
0   29  0.315246183 6   1
1   0   0.510678961 3   1
1   1   0.254872928 15  1
1   2   0.274447714 2   1
1   3   0.258144341 40  1
1   4   0.231080412 11  1
1   5   0.330260801 2   1
1   6   0.252972823 2   1
1   7   0.536704433 2   1
1   8   0.563287425 2   1
1   9   0.469793466 32  1
1   10  0.504253272 5   1
1   11  0.509408549 36  4
1   12  0.539940366 54  1
1   13  0.472334971 6   1
1   14  0.423524875 2   1
1   15  0.254872928 13  1
1   16  0.231080412 8   1
1   17  0.39818992  22  1
1   18  0.545173384 4   1
1   19  0.280489713 9   1
1   20  0.280509697 6   1
1   21  0.560193886 6   1
1   22  0.485332134 8   2
1   23  0.481483179 3   1
1   24  0.496115634 29  4
1   25  0.466198213 2   1
1   26  0.552777113 5   1
1   27  0.240848653 6   1
1   28  0.30456948  17  2
1   29  0.315246183 6   1
2   0   0.510678961 3   1
2   1   0.254872928 15  1
2   2   0.274447714 2   1
2   3   0.258144341 40  1
2   4   0.231080412 11  1
2   5   0.330260801 2   1
2   6   0.252972823 2   1
2   7   0.536704433 2   1
2   8   0.386891594 2   1
2   9   0.469793466 32  1
2   10  0.504253272 5   1
2   11  0.509408549 5   1
2   12  0.539940366 54  1
2   13  0.472334971 6   1
2   14  0.423524875 2   1
2   15  0.254872928 13  1
2   16  0.231080412 8   1
2   17  0.39818992  22  1
2   18  0.545173384 4   1
2   19  0.280489713 9   1
2   20  0.280509697 6   1
2   21  0.231080412 6   1
2   22  0.485332134 8   2
2   23  0.481483179 3   1
2   24  0.496115634 29  4
2   25  0.466198213 2   1
2   26  0.552777113 5   1
2   27  0.240848653 6   1
2   28  0.30456948  5   2
2   29  0.315246183 6   1
3   0   0.510678961 3   1
3   1   0.254872928 15  1
3   2   0.274447714 2   1
3   3   0.258144341 40  1
3   4   0.231080412 11  1
3   5   0.330260801 2   1
3   6   0.252972823 2   1
3   7   0.536704433 2   1
3   8   0.386891594 2   1
3   9   0.469793466 32  1
3   10  0.504253272 5   1
3   11  0.509408549 17  1
3   12  0.539940366 54  1
3   13  0.472334971 6   1
3   14  0.423524875 2   1
3   15  0.254872928 13  1
3   16  0.231080412 76  1
3   17  0.39818992  22  1
3   18  0.231080412 4   1
3   19  0.280489713 9   1
3   20  0.280509697 6   1
3   21  0.231080412 6   1
3   22  0.485332134 8   2
3   23  0.481483179 3   1
3   24  0.496115634 29  4
3   25  0.466198213 2   1
3   26  0.231080412 5   1
3   27  0.240848653 6   1
3   28  0.30456948  5   2
3   29  0.315246183 6   1

.................................

我需要为每组30个值找到C列中最小的10个数字,并从D列中获取它们的相应值,并从D列中找到这10个值的平均值。必须对每个值重复30行,最多100集。

我尝试过SMOOK的VLOOKUP。但我的要求似乎过于复杂,以至于无法得到正确的答案。我非常感谢你的帮助。提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果=AVERAGEIFS(colD,colA,G2,colC,"<="&AGGREGATE(15,6,1/(1/((colA=G2)*colC)),10)) 包含所需的组号(来自ColumnA),则以下公式应该有效:

AGGREGATE

DIV/0函数将从相应组中的值数组返回第十个最小值,如果不是1/(1/(...错误,则返回AGGREGATE错误。{{1}}产生错误该数组中的值(由{{1}}忽略)。

根据您发布的数据,我得到以下结果:

enter image description here

注意:如果每组中最小的10个值中存在重复项,则平均值将超过10个值。如果有重复,请考虑一下您想要发生的事情。

答案 1 :(得分:1)

好的,这很棘手,但我认为这可以通过简单的公式来完成:

添加到单元格 F1

=IF($B1=0,SMALL(OFFSET(INDIRECT(CONCAT("$C",ROW()-MOD(ROW(),30)+1),TRUE),0,0,30),$B1+1),IF($B1<10,SMALL(OFFSET(INDIRECT(CONCAT("$C",ROW()-MOD(ROW(),30)+1),TRUE),0,0,30),$B1+1),""))

添加到单元格 G1

=IF($F1<>"",VLOOKUP($F1,OFFSET(INDIRECT(CONCAT("$C",ROW()-MOD(ROW(),30)+1),TRUE),0,0,30,2),2,FALSE),"")

添加到单元格 H1

=IF(B1=0,AVERAGE($G1:$G10),"")

如果你填写整张表,它应该做你想要的。例如,范围1:30将如下所示......

A   B   C           D   E   F           G   H
0   0   0.510678961 3   1   0.231080412 8   7.1
0   1   0.582611161 15  1   0.240848653 6   
0   2   0.274447714 2   1   0.252972823 2   
0   3   0.258144341 2   1   0.254872928 13  
0   4   0.574404811 11  1   0.258144341 2   
0   5   0.330260801 2   1   0.274447714 2   
0   6   0.252972823 2   1   0.280489713 9   
0   7   0.536704433 2   1   0.280509697 6   
0   8   0.563287425 2   1   0.30456948  17  
0   9   0.469793466 32  1   0.315246183 6   
0   10  0.504253272 5   1           
0   11  0.509408549 36  4           
0   12  0.539940366 54  1           
// The latter 20 rows of each set of 30 will be blank in the computed column...

希望这会有所帮助,如果您愿意,我很乐意解释这是如何工作的