【VBA】テーブル化された表の、条件に一致しないデータの合計値を取得する【SUMIF】

例えばテーブル「productテーブル」の
 ・列「productName」が「りんごでない」の
 ・列「price」の合計値
を取得できます!
※条件に一致しないデータの合計値を取得できます。

「りんごでない」の列「price」の合計値は「160」。



VBAから
 ・ワークシート関数「SumIf」
を使用することで、取得できます!
具体的には「WorksheetFunctionオブジェクト」の「SumIf」メソッドを使用します。

SumIf関数の条件に
 ・比較演算子「<>
を使用することで、取得できます!
※「<>」により「条件に一致しない」を実現できます。

PR

VBAコード

ここでは例として、
 ・シート「data」上の
 ・テーブル化された表「productテーブル」の
 ・列「productName」が「りんごでない」の
 ・列「price」の合計値を取得
します。

Option Explicit

Sub sample()
    
    Dim productNameRange As Range
    Dim priceRange As Range
    Dim total As Long
    
    With Worksheets("data").ListObjects("productテーブル")
        '列「productName」のセル範囲を取得
        Set productNameRange = .ListColumns("productName").DataBodyRange
        '列「price」のセル範囲を取得
        Set priceRange = .ListColumns("price").DataBodyRange
    End With
    
    '列「productName」が「りんごでない」の列「price」の合計値を取得
    total = WorksheetFunction.SumIf(productNameRange, "<>" & "りんご", priceRange)

    MsgBox ("「りんごでない」の列「price」の合計値は『" & total & "』です。")
    
End Sub

「Worksheetオブジェクト」の「ListObjects」プロパティにより、「ListObjectオブジェクト」を取得します(8行目)。

「ListObjectオブジェクト」の「ListColumns」プロパティにより、「ListColumnオブジェクト」を取得します(10、12行目)。

「ListColumnオブジェクト」の「DataBodyRange」プロパティにより、「指定した列のセル」を取得します(10、12行目)。
※上記では列「productName」と「price」のセルを取得しています。

ワークシート関数「SumIf」のより、「条件に一致しないデータの合計値」を取得します(14行目)。
※「WorksheetFunctionオブジェクト」の「SumIf」メソッドにより取得します。

引数に以下を指定します。

第1引数・・・条件にしたいセル範囲
第2引数・・・「<>」と「条件 ※左記により「条件に一致しない」となります。
第3引数・・・合計値を取得にしたいセル範囲

PR

実行結果

テーブル化された表の、条件に一致しないデータの合計値を取得できました。
※「りんごでない」の列「price」の合計値である「160」が取得できました。

実行結果
実行結果
PR

参考①

VBAでなく、シート上でExcel関数のみで同様のことができます。

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

PR

参考②

表をテーブル化する方法は、以下の記事をご確認ください。

PR

参考③

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●「Worksheetオブジェクト」の「ListObjects」プロパティ


●「ListObjectオブジェクト」の「ListColumns」プロパティ


●「ListColumnオブジェクト」の「DataBodyRange」プロパティ


●ワークシート関数「SumIf」
※「WorksheetFunctionオブジェクト」の「SumIf」メソッド