【VBA】表の指定した列でデータを絞り込んで、絞り込まれたデータの合計値を取得する

VBAで
 ・表の指定した列でデータを絞り込んで

 ・絞り込まれたデータの合計値を取得
できます!
※例えば「佐藤」の売上の合計値を取得できます。

「佐藤」の売上の合計値は「120」
「佐藤」の売上の合計値は「120」
「佐藤」の売上の合計値である「120」を取得
「佐藤」の売上の合計値である「120」を取得


VBAで
 ・表をテーブル化
 ・オートフィルタでデータの絞り込み
 ・絞り込んだデータの合計値を取得
 ・テーブル化の解除
の実施により実現します!
※一時的にテーブル化することで、シンプルなコードにできます。

PR

VBAコード

ここでは例として、
 ・シート「data」上の表をテーブル化
 ・列「名前」を「佐藤」で絞り込み
 ・列「売上」の合計値を取得
 ・テーブル化を解除
します。

「佐藤」の売上の合計値は「120」
「佐藤」の売上の合計値は「120」
Option Explicit

Sub sample()

    Dim ws As Worksheet
    Dim startRange  As Range
    Dim filterColumnName As String
    Dim filterStr As String
    Dim totalColumnName As String
    Dim table As ListObject
    Dim total As Long
    
    '対象シート
    Set ws = Worksheets("data")
    '表の一番左上のセル
    Set startRange = ws.Range("B2")
    'フィルタ対象の列名
    filterColumnName = "名前"
    'フィルタする文字列
    filterStr = "佐藤"
    '集計対象の列名
    totalColumnName = "売上"
    
    '表をテーブル化してListObjectを取得
    Set table = ws.listObjects.Add(Source:=startRange.CurrentRegion, XlListObjectHasHeaders:=xlYes)
    '「フィルタ対象の列」にて「フィルタする文字列」で絞り込み
    startRange.AutoFilter field:=table.ListColumns(filterColumnName).Index, Criteria1:=filterStr
    '「集計対象の列」の「絞り込まれたデータの合計値」を取得
    total = WorksheetFunction.Subtotal(9, table.ListColumns(totalColumnName).DataBodyRange)

    'テーブル化を解除
    With table
        .TableStyle = ""
        .Unlist
    End With
    
    '結果を出力
    MsgBox filterStr & "の" & totalColumnName & "の合計: " & total
    
End Sub

以下を指定します(14~22行目)。
※状況に応じて任意の値を指定してください。

・対象シート
・表の一番左上のセル
・フィルタ対象の列名
・フィルタする文字列
・集計対象の列名

PR

実行結果

表の指定した列でデータを絞り込んで、絞り込まれたデータの合計値を取得できました。
※「佐藤」の売上の合計値「120」を取得できました。

実行結果
実行結果
PR

参考①

上記のVBAコードは以下の記事を参考にして作成しました。

●シート上の表をテーブル化する


●シート上の表のテーブル化を解除する


●テーブル化された表の、指定した列の合計値/最大値/最小値を取得する

PR

参考②

上記では「WorksheetFunctionオブジェクト」の「Subtotal」メソッドを使用して、合計値を取得しています。

「Subtotal」メソッドは「取得する合計値の対象」を「フィルタにより絞り込みされているデータのみ」にできます。


「WorksheetFunctionオブジェクト」の「SumIf」メソッドでも、本記事と同様のことができます。

「SumIf」メソッドを使用した方がシンプルなコードにできます。
※上記で紹介したコードと同様に、表をテーブル化することでよりシンプルなコードにできます。


詳細は以下の記事をご確認ください。

PR

参考③

本記事の内容は
 ・いただいた問い合わせを参考にして作成
しました。

タイトルとURLをコピーしました