假设您有一个巨大的工作表,其中包含过去一百多年左右的给定语言环境的所有降雨读数。在单元格A2:A37987中,您可以看到1903年1月1日到2006年12月31日之间的日期。在单元格B2:B37987中,您具有每个日期的度量值。此外,某些测量值可以为零(如果当天没有降雨)或空白(如果在特定的一天没有读数)。利用所有这些信息,您想要计算一年中任何给定日期的平均历史降雨量。

一种解决方案涉及使用数组公式,如下所示:

。在A列中选择所有包含日期​​的单元格,然后为该范围分配名称Dates。

。在B列中选择所有包含降雨数据的单元格,并将该范围命名为Rainfall。

。在D列中,从单元格D2开始,放置一年中的所有日子。您应该以填充日期的D2至D366结尾。

。在单元格E2中,输入以下数组公式(通过按Shift + Ctrl + Enter终止该公式)。对于单元格D2中指定的日期,公式的结果是“降雨范围”中所有单元格的总和。

=SUM((MONTH(Dates)=MONTH(D2))(DAY(Dates)=DAY(D2))Rainfall)

在单元格F2中,输入以下数组公式(通过按Shift + Ctrl + Enter终止该公式)。公式的结果是,对于单元格D2中的日期,“降雨范围”中的单元格数目中具有值。

=SUM((MONTH(Dates)=MONTH(D2))(DAY(Dates)=DAY(D2))(Rainfall<>""))

在单元格G2中,输入以下常规公式。这是单元格D2中日期的平均值。

=IF(F2<>0,E2/F2,"")

选择范围E2:G2并复制D列中显示的所有日期。

这种方法可行,但是要花相当长的时间才能计算出来。这是因为您有效地输入了730个数组公式,每个矩阵公式检查了37,000个以上的单元格。这是一项繁重的工作,因此,在完成步骤7之后,您的计算机可能看起来像“挂了”。这将花费一些时间来完成计算。

要减少必须执行的计算数量,可以在上述步骤中使用变体。如上所述,请按照步骤1到3进行操作,然后将以下数组公式放入单元格E2中:

然后,您可以将公式复制为D列中显示的所有日期。该公式的结果是实际平均降雨量,与先前方法中的G列中所示的相同。

=AVERAGE(IF(ISNUMBER(Dates)ISNUMBER(Rainfall)(MONTH(Dates)=MONTH(D2))*(DAY(Dates)=DAY(D2)),Rainfall))

由于布尔运算在Excel中的工作方式,因此该公式起作用。 ISNUMBER函数返回True或False,比较(MONTH和DAY)返回True或False。这些结果彼此相乘,仅当所有单个测试均为True时,结果为True。仅当它们全部为True时,才会计算该特定日期的平均降雨量。

您只需删除所有用于计算一年中每一天平均值的表,就可以进一步减少计算开销。在A和B列中输入日期和降雨量,请按照以下步骤操作:

。在A列中选择所有包含日期​​的单元格,并为该范围指定名称Dates。

。在B列中选择所有包含降雨数据的单元格,并将该范围命名为Rainfall。

。在单元格D2中,放置要检查平均降雨量的日期。 (年份并不重要;在计算中仅使用月份和日期。)

。在单元格E2中输入以下公式:

而已。现在,您可以根据需要在单元格D2中更改日期,单元格E2将始终指示该日期的平均降雨量。 E2单元格中的公式与最后一种方法中使用的公式相同;所不同的是,您并不是一年中的所有天都在计算它,因此计算速度更快。

=AVERAGE(IF(ISNUMBER(Dates)ISNUMBER(Rainfall)(MONTH(Dates)=MONTH(D2))*(DAY(Dates)=DAY(D2)),Rainfall))

另一种方法涉及使用Excel的筛选功能。

但是,在正确使用它们之前,必须创建一列,以仅显示数据中每个日期的月份和日期。在单元格C2中使用以下公式:

现在,启用“自动过滤”(“数据” |“过滤器” |“自动过滤”),并使用新列顶部的下拉列表选择您想要平均的日期。然后,使用以下公式,将其放在所需的任何单元格中,以显示所选日期的平均降雨量:

=MONTH(A2) & "-" & DAY(A2)

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(2350)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本:

=SUBTOTAL(1,B:B)

链接:/ excelribbon-Calculating_Averages_by_Date [按日期计算平均值]。