VBAで
・表の指定した列でデータを絞り込んで
・絞り込まれたデータの合計値を取得
できます!
※例えば「佐藤」の売上の合計値を取得できます。
VBAで
・表をテーブル化
・オートフィルタでデータの絞り込み
・絞り込んだデータの合計値を取得
・テーブル化の解除
の実施により実現します!
※一時的にテーブル化することで、シンプルなコードにできます。
VBAコード
ここでは例として、
・シート「data」上の表をテーブル化
・列「名前」を「佐藤」で絞り込み
・列「売上」の合計値を取得
・テーブル化を解除
します。
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
実行結果
表の指定した列でデータを絞り込んで、絞り込まれたデータの合計値を取得できました。
※「佐藤」の売上の合計値「120」を取得できました。
参考①
上記のVBAコードは以下の記事を参考にして作成しました。
●シート上の表をテーブル化する
●シート上の表のテーブル化を解除する
●テーブル化された表の、指定した列の合計値/最大値/最小値を取得する
参考②
上記では「WorksheetFunctionオブジェクト」の「Subtotal」メソッドを使用して、合計値を取得しています。
「WorksheetFunctionオブジェクト」の「SumIf」メソッドでも、本記事と同様のことができます。
詳細は以下の記事をご確認ください。
参考③
本記事の内容は
・いただいた問い合わせを参考にして作成
しました。