Etemon Asked: 2023-07-13 04:49:37 +0800 CST2023-07-13 04:49:37 +0800 CST 2023-07-13 04:49:37 +0800 CST 求Excel 2021中相似第一列数据的平均值 772 我有大量数据,下图是我数据的一部分, 第一列始终是自然数(不一定是连续的),对于具有相同第一列数据的行,我想找到其下一列数据的平均值。例如,第一列的前三个单元格是 142,我想找到接下来每一列的接下来三个单元格的平均值。由于我有大量数据,我想让这个过程自动进行,我尝试了“AVERAGEIF”公式,但没有结果。你能帮我么? microsoft-excel 2 个回答 Voted Best Answer karl 2023-07-13T05:10:08+08:002023-07-13T05:10:08+08:00 鉴于您确实仅以图片形式提供数据,我在范围内创建了一些随机数据,如下所示A1:E17: A 乙 C D 乙 142 0.02 0.19 0.83 0.14 142 0.65 0.61 0.38 0.82 142 0.60 0.34 0.36 0.37 141 0.98 0.95 0.23 0.97 141 0.83 0.24 0.50 0.67 141 0.02 0.14 0.33 0.23 140 0.33 0.14 0.85 0.64 140 0.78 0.09 0.17 0.06 139 0.08 0.70 0.26 0.26 139 0.25 0.16 0.35 0.67 138 0.52 0.44 0.18 0.44 138 0.21 0.93 0.04 0.23 138 0.66 0.33 0.72 0.39 138 0.91 0.91 0.51 0.30 137 0.39 0.60 0.28 0.46 137 0.43 0.81 0.41 0.14 现在,您分别输入例如单元格G2和H2以下公式;AVERAGEIF()可以对附加列重复该公式: =SORT(UNIQUE($A$2:$A$17)) =AVERAGEIF($A$2:$A$17,$G$2#,B2:B17) 现在一些补充说明;该UNIQUE()函数可用于提取唯一 ID。该函数返回一个数组,然后可以将AVERAGEIF()其用于自动溢出。该SORT()函数用于将 ID 值按升序排列。对于该AVERAGEIF()函数,您首先指定要查找 ID 的范围,例如在您的 column 中A。接下来指定条件,即我们获得的数组UNIQUE(),最后指定要求平均值的列。 输出将如下所示: ID 平均。 137 0.41 138 0.57 139 0.17 140 0.55 141 0.61 142 0.42 扩展以将所有平均值作为一个数组访问并将所有公式放在一个单元格中: 根据用例,您可能有兴趣将所有平均值作为一个数组进行访问。为了实现这一点,您可以将AVERAGEIF()函数包装在HSTACK(). 这样,公式会因UNIQUE()函数而向下溢出,并因函数而向右溢出HSTACK()。这样,您还可以将所有公式放在一个单元格中,这有时也更容易维护: =HSTACK( AVERAGEIF($A$2:$A$17,$G$2#,B2:B17), AVERAGEIF($A$2:$A$17,$G$2#,C2:C17), AVERAGEIF($A$2:$A$17,$G$2#,D2:D17), AVERAGEIF($A$2:$A$17,$G$2#,E2:E17) ) 假设公式仍在 cell 中H2,您可以按如下方式访问完整的数组: =SUM(H2#) 基于注释的扩展包括动态范围: 为了实现这一点,您可以使用LET()如下语句: =LET( lastCol, "E", data, INDEX(A:A,2):INDEX(INDIRECT(CONCATENATE(lastCol, ":", lastCol)), MAX(IF(A:A<>"", ROW(A:A)))), id, SORT(UNIQUE(INDEX(data,2,1):INDEX(data,ROWS(data),1))), b, AVERAGEIF(INDEX(data,,1), id, INDEX(data,,2)), c, AVERAGEIF(INDEX(data,,1), id, INDEX(data,,3)), d, AVERAGEIF(INDEX(data,,1), id, INDEX(data,,4)), e, AVERAGEIF(INDEX(data,,1), id, INDEX(data,,5)), HSTACK(id,b,c,d,e) ) 首先,指定包含数据的“最后”列。行数是根据列自动计算的A,因此,您需要确保没有任何数据低于您要使用的数据。所有其他方面都与我们之前的类似,只是包装在一个LET()语句中,它允许您动态访问数据范围 via INDEX(),因为它可以存储中间结果。 这种方法将达到您的要求。然而,需要注意的是,它不一定能够很好地扩展到许多列,因为现在它需要您对每一列重复该公式。从理论上讲,应该可以使这个维度更加动态,但它超出了这里扩展的范围。 Brian 2023-07-13T05:33:34+08:002023-07-13T05:33:34+08:00 在F2中:=AVERAGE(IF($A$2:$A$17=$A2,B$2:B$17)) 在G2中:=AVERAGE(IF($A$2:$A$17=$A2,C$2:C$17)) 在 H2 中:=AVERAGE(IF($A$2:$A$17=$A2,D$2:D$17)) 在 I2 中:=AVERAGE(IF($A$2:$A$17=$A2,E$2:E$17)) 注意:这是一个数组公式。在早期版本的 Excel 中,您必须按CTRL+SHIFT+ENTER才能使公式生效。当前版本的 Excel 只需按 即可Enter。
鉴于您确实仅以图片形式提供数据,我在范围内创建了一些随机数据,如下所示
A1:E17
:现在,您分别输入例如单元格
G2
和H2
以下公式;AVERAGEIF()
可以对附加列重复该公式:现在一些补充说明;该
UNIQUE()
函数可用于提取唯一 ID。该函数返回一个数组,然后可以将AVERAGEIF()
其用于自动溢出。该SORT()
函数用于将 ID 值按升序排列。对于该AVERAGEIF()
函数,您首先指定要查找 ID 的范围,例如在您的 column 中A
。接下来指定条件,即我们获得的数组UNIQUE()
,最后指定要求平均值的列。输出将如下所示:
扩展以将所有平均值作为一个数组访问并将所有公式放在一个单元格中:
根据用例,您可能有兴趣将所有平均值作为一个数组进行访问。为了实现这一点,您可以将
AVERAGEIF()
函数包装在HSTACK()
. 这样,公式会因UNIQUE()
函数而向下溢出,并因函数而向右溢出HSTACK()
。这样,您还可以将所有公式放在一个单元格中,这有时也更容易维护:假设公式仍在 cell 中
H2
,您可以按如下方式访问完整的数组:基于注释的扩展包括动态范围:
为了实现这一点,您可以使用
LET()
如下语句:首先,指定包含数据的“最后”列。行数是根据列自动计算的
A
,因此,您需要确保没有任何数据低于您要使用的数据。所有其他方面都与我们之前的类似,只是包装在一个LET()
语句中,它允许您动态访问数据范围 viaINDEX()
,因为它可以存储中间结果。这种方法将达到您的要求。然而,需要注意的是,它不一定能够很好地扩展到许多列,因为现在它需要您对每一列重复该公式。从理论上讲,应该可以使这个维度更加动态,但它超出了这里扩展的范围。
在F2中:
=AVERAGE(IF($A$2:$A$17=$A2,B$2:B$17))
在G2中:
=AVERAGE(IF($A$2:$A$17=$A2,C$2:C$17))
在 H2 中:
=AVERAGE(IF($A$2:$A$17=$A2,D$2:D$17))
在 I2 中:
=AVERAGE(IF($A$2:$A$17=$A2,E$2:E$17))
注意:这是一个数组公式。在早期版本的 Excel 中,您必须按
CTRL+SHIFT+ENTER
才能使公式生效。当前版本的 Excel 只需按 即可Enter
。