スージーには、かなりの量のデータが含まれているワークシートがあります。彼女がワークシート内の列を非表示にすることは珍しいことではありません。彼女は、隠されたセルを無視しながら、すべて同じ行にあるセルの範囲の平均を返す数式を必要としています。たとえば、スージーが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_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(13262)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。