Susie的工作表中包含很多数据。她隐藏工作表中的列并不罕见。她需要一个公式,该公式将返回同一行中所有单元格区域的平均值,而忽略任何隐藏的单元格。例如,如果Susie选择B7:G7,则她只希望该范围内可见的单元格的平均值(在这种情况下,列D和E被隐藏)。

Excel中没有内部函数来计算这样的平均值。如果要查找列中某个单元格范围的平均值,则可以按这种方式使用SUBTOTAL函数:

=SUBTOTAL(101,A7:A12)

但是,当提供的范围在一行内时,SUBTOTAL函数将不会返回准确的值。如果需要,可以使用一些辅助单元格进行计算。只需将以下内容放入单元格B8中:

=(CELL("width",B7)>0)+0

将单元格B8复制到范围C8:G8。结果是,根据列是否隐藏,范围B8:G8中的每个单元格将包含0或1。然后,您可以使用以下公式确定平均值:

=SUMIFS(B7:G7,B8:G8,">0")/SUM(B8:G8)

它仅计算B8:G8中的单元格包含值1(未隐藏)的那些列的平均值。

当然,您可能无法使用辅助单元,并且可能会发现创建用户定义的函数来计算平均值更为有益。以下操作非常迅速:

Function AverageVisible(rng As Range)

Dim rCell As Range     Dim iCount As Integer     Dim dTtl As Double

iCount = 0     dTtl = 0     For Each rCell In rng         If rCell.ColumnWidth > 0 _           And rCell.RowHeight > 0 _           And Not IsEmpty(rCell) _           And IsNumeric(rCell.Value) Then               dTtl = dTtl + rCell               iCount = iCount + 1         End If     Next     If iCount > 0 Then         AverageVisible = dTtl / iCount     Else         AverageVisible = 0     End If End Function

为了使用该函数,只需将此公式放在要包含平均值的单元格中:

=AverageVisible(B7:G7)

该函数检查范围内的每个单元格(这意味着您可以在行,列或实际上的任何范围内使用它),以确保它不是隐藏的也不为空。如果单元格包含数字值,则将其用于计算平均值。如果您指定的范围不包含任何可以求平均值的值,则该函数将返回值0。

每次重新计算工作表时,该函数都会自动运行。如果更改了隐藏的列,则Excel不会自动重新计算。因此,您需要在隐藏或取消隐藏列后强制进行重新计算。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

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

本技巧(13262)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。