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の範囲に配置します。

A B C
1 商品名 数量 価格
2 りんご 5 100
3 バナナ 7 200
4 チェリー 8 300
5 りんご 6 150
6 バナナ 9 220
7 チェリー 10 350
8 りんご 8 120
9 バナナ 11 210
10 チェリー 12 360

以下に、特定のデータセットに対して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(合計)を使用しています。

 

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