【问题标题】:How to get the average of values corresponding to another column in Excel如何获取与Excel中另一列对应的值的平均值
【发布时间】:2018-01-27 23:43:32
【问题描述】:

我有一组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 套。

我已尝试使用 SMALL 进行 VLOOKUP。但是我的要求似乎太复杂了,我无法得到正确的答案。我非常感谢您的帮助。提前致谢。

【问题讨论】:

  • 您可能需要多个级别的循环计算。使用辅助列或在 vba 变体数组中运行计算。

标签: excel average vlookup


【解决方案1】:

如果 G2 包含所需的组号(来自您的 ColumnA),那么以下公式应该有效:

=AVERAGEIFS(colD,colA,G2,colC,"<="&AGGREGATE(15,6,1/(1/((colA=G2)*colC)),10))

AGGREGATE 函数将返回适当组中的值数组中的第十个最小值,如果不是,则返回 DIV/0 错误。1/(1/(... 产生错误值(被 @987654328 忽略@) 在那个数组中。

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

注意:如果每组中最小的 10 个值存在重复,则您将平均超过 10 个值。仔细想想如果有重复,你希望发生什么。

【讨论】:

  • 感谢您的回答。正是我想要的。 +1 指出关于重复的事​​实。如果存在重复项,我认为平均所有值符合我的要求。再次感谢
【解决方案2】:

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

添加到单元格F1:

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

添加到单元格G1:

=IF($F1&lt;&gt;"",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...

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

【讨论】:

  • 我使用 RANK 和 AVERAGEIFS 得出了相同的结果。
猜你喜欢
  • 2019-05-23
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 2016-12-07
相关资源
最近更新 更多