SUMIF関数で非表示のレコードを無視したい ①
本日、このような相談を受けた。
「SUMIF関数で合計を求めているのだが、絞り込みで非表示になったレコードは無視したい」
早速挑戦だ。
※Canvaでキーワード「サム」で検索したら出てきたのだが・・・誰だろう?
相談があった表は、こんなイメージだ。
販売月別に、各果物の売り上げがまとめられている。
さらに、理由は定かでないが、ピボットテーブルは用いず、このような表で「SUMIFによる集計」が行われていた。
今回、表の作りは本題ではないため、不問とする。
この表に於いて、例えば4月のみ表示させてみる。
このとき、集計した表の販売合計も、追従して表示中の金額のみを合計したいとのことだった。
↓ 追従していない状態。合計金額が、絞り込み前と変わっていない。
この問題について、ネットで色々調べてみたところ、SUMPRODUCT関数との組み合わせで「表示・非表示状態を取得する」などの合わせ技が、多数紹介されていた。
そこで、関数で解決する方法についてはそちらにお任せするとして、マクロで解決したらどうなるか、考えてみた。
といっても、非表示であれば足し算しないという、実に単純な方法だ。
Function SumIf_OnlyNotHidden(target_range As Range, _ search_condition As Variant, _ total_range As Range) As Long If target_range.Columns.Count > 1 Then Exit Function If total_range.Columns.Count > 1 Then Exit Function Dim ⊿C As Long ⊿C = total_range.Column - target_range.Column Dim TempSum As Long Dim r As Range For Each r In target_range On Error Resume Next If r.Value = search_condition Then If r.EntireRow.Hidden = False Then TempSum = TempSum + r.Offset(, ⊿C).Value End If End If Next SumIf_OnlyNotHidden = TempSum End Function
今回は、千行にも満たない小~中規模の表だったため、特に問題なく動いてくれた。従って、レコード数が数十万に及んだ場合はどうなるか、などの検証は行っていない。
とりあえず、こんな方法もあるよ、という紹介ってことで。
参考まで。