web-dev-qa-db-ja.com

フィルターで除外されていないExcelの行のみを合計するにはどうすればよいですか?

SUM(B1..B20)式を使用して列を合計しますが、隣接する列でデータをフィルター処理すると、合計はフィルター処理されていない行のみを反映するように更新されません。これをどのように行うのですか?

52
Iain

[〜#〜]小計[〜#〜]関数を使用する必要があります。 [〜#〜] subtotal [〜#〜]関数は、フィルターによって除外された行を無視します。

数式は次のようになります。

=SUBTOTAL(9,B1:B20)

関数番号9[〜#〜] sum [〜#〜]データ範囲の関数B1:B20

行を非表示にすることで「filtering」の場合、関数番号は109に更新する必要があります。

=SUBTOTAL(109,B1:B20)

関数番号109は、[〜#〜] sum [〜#〜]も機能しますが、非表示の行は無視されます。

99
Robert Mearns

自動フィルターを使用していない場合(つまり、手動で非表示の行がある場合)、AGGREGATEの代わりに SUBTOTAL 関数を使用する必要があります。

3
Tim

オートフィルターを使用して結果をフィルター処理する場合、Excelは結果を非表示にすることすらしません。行の高さをゼロに設定するだけです(少なくとも2003年まで。2007年は不明)。

したがって、次のカスタム関数を使用すると、必要なことを行うためのスターターが提供されます(整数でテストされ、他の何も遊んでいない)。

Function SumVis(r As Range)
    Dim cell As Excel.Range
    Dim total As Variant

    For Each cell In r.Cells
        If cell.Height <> 0 Then
            total = total + cell.Value
        End If
    Next

    SumVis = total
End Function

編集:

ブックにモジュールを作成して関数を挿入する必要があります。その後、他の関数(= SumVis(A1:A14))と同様にシート上でモジュールを呼び出すことができます。モジュールのセットアップにヘルプが必要な場合は、お知らせください。

2
mavnn