Subtotalメソッド解説(Excel VBA)

Excel VBAのRange.Subtotalメソッド

Excel VBAのRangeオブジェクトには、データの集計に役立つ「Subtotal」メソッドがあります。これを使用すると、データセットの指定された列に対して、集計操作(合計、平均、カウントなど)を実行し、結果を出力することができます。

メソッドの構文

    RangeObject.Subtotal(GroupBy, Function, TotalList, Replace, PageBreaks, SummaryBelowData)

パラメータ

  • GroupBy: サブトータルを計算する列のインデックス
  • Function: 使用する関数を示すXlConsolidationFunction定数
  • TotalList: 集計を適用する列のインデックスを含む配列
  • Replace: 既存のサブトータルを置き換えるかどうかを示すBoolean値(省略可能)
  • PageBreaks: 各集計グループの後にページ区切りを挿入するかどうかを示すBoolean値(省略可能)
  • SummaryBelowData: サブトータルの行をデータの上または下に配置するかどうかを示すBoolean値(省略可能)

サンプルコード

このデータはExcelシートのA1:C10の範囲に配置します。

ABC
1商品名数量価格
2りんご5100
3バナナ7200
4チェリー8300
5りんご6150
6バナナ9220
7チェリー10350
8りんご8120
9バナナ11210
10チェリー12360

以下に、特定のデータセットに対してSubtotalメソッドを使用した例を示します。

Sub ApplySubtotal()

    ' 集計対象範囲を変数に格納
    Dim rng As Range
    Set rng = Range("A1:C10")

    ' 商品名列(列1)でソート
    rng.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes

    ' すでにあるサブトータルを削除します
    rng.RemoveSubtotal

    ' サブトータルを適用します
    rng.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2, 3), Replace:=True, PageBreaks:=False, SummaryBelowData:=True

End Sub

このコードは、A1:C10の範囲を選択し、まずグループ化予定の列(A列)をキーにして並べ替えをします。続けて既存のサブトータルを削除します。その後、GroupByパラメータに1を指定して1列目(A列)のユニークな値ごとにグループ化を行います。その後、TotalListパラメータで指定した列(この場合は2列目と3列目)のサブトータルを計算します。この例では、集計関数としてxlSum(合計)を使用しています。