8/06/2023

Excel。VBA。小計機能を手早く解除するには、どうしたらいい。【stop subtotal】

Excel。VBA。小計機能を手早く解除するには、どうしたらいい。

<Excel VBA:RemoveSubtotal>

項目ごとの集計を手早く行うことができる、「小計機能」。


ただ、少々面倒なのが、小計した結果から、元に戻す場合です。


小計のダイアログボックスを表示して、すべて解除のボタンをクリックする。


そして、並べ替えをしないと小計機能が有効に使えないので、元の戻す並べ替えをしなければいけません。


そこで、手早く解除するために、Excel VBAでプログラムをつくってみましょう。


Sub 小計リセット()

    Range("a1").CurrentRegion.RemoveSubtotal

    

    With ActiveSheet.Sort

        .SortFields.Clear

        .SortFields.Add2 Key:=Range("a1"), Order:=xlAscending

        .SetRange Range("a1").CurrentRegion

        .Header = xlYes

        .Apply

    End With

End Sub


実行して確認してみましょう。

小計解除

小計機能から通常の表に戻すことができました。


では、プログラムを確認しておきます。

Range("a1").CurrentRegion.RemoveSubtotal


これは、A1を起点とする範囲を、「RemoveSubtotal」=小計解除するという意味です。


たった一行だけで、小計機能を解除することができるというわけです。



あとは、並べ替えをして、元に戻す処理をしています。

    

    With ActiveSheet.Sort

        .SortFields.Clear

        .SortFields.Add2 Key:=Range("a1"), Order:=xlAscending

        .SetRange Range("a1").CurrentRegion

        .Header = xlYes

        .Apply

    End With


並べ替えは、「並べ替えのダイアログボックス」にある項目を設定するイメージでプログラムをつくります。


「SortFields.Add2 Key:=Range("a1"), Order:=xlAscending」

この行は、A1の見出しである、「NO」を「xlAscending=昇順」で処理するように設定しています。


「SetRange Range("a1").CurrentRegion」

A1を起点として連続する範囲を並べ替えの対象としています。


「Header = xlYes」

一行目を見出し行としますかということで、見出し行なので、「xlYes」と設定します。


このように、プログラムをつくるだけで、小計機能を解除することができます。