大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、ピボットテーブルをグループ化する方法について、ご紹介します。グループ化する対象は、「数値」と「日付」です。「20点刻み」でグループ化したり、「年、月」でグループ化することができます。「グループ化」はよく使う操作なので、VBAで自動化していきましょう。

はじめに

この記事では、VBAでピボットテーブルをグループ化する方法について、ご紹介しました。

グループする対象は、2つあります。

  • 数値
  • 日付

という感じです。

数値は、「1~100」点を、「20」点刻みでグループ化する、というようにグループします。

日付は、「年、月、日」や「年、月」、「年」でグループ化するといった感じです。

「グループ化」は、よく使う操作なので、VBAを使ってピボットテーブルの操作を自動化していきましょう。

では、VBAでピボットテーブルをグループ化する方法について、解説していきます。

この記事で紹介すること

  • VBAでピボットテーブルをグループ化する方法

目次から使いそうな説明のところへ移動すると便利ですよ。

目次

VBAコードまとめ

ピボットテーブルのグループ化について、VBAコードをまとめています。

VBAコードだけを確認したい場合に、ご活用ください。

'【DataRange】を使う場合

'数値をグループ化
With ActiveSheet.PivotTables(1).PivotFields("点数").DataRange.Cells(1, 1)
    .Group Start:=0, End:=100, By:=20 '0~100を、20刻みでグループ化
End With

'日付をグループ化
With ActiveSheet.PivotTables(1).PivotFields("日付").DataRange.Cells(1, 1)
    '年、月、日でグループ化
    .Group Start:=True, End:=True, periods:=Array(False, False, False, True, True, False, True)
End With

'グループ化の解除
With ActiveSheet.PivotTables(1).PivotFields("点数").DataRange.Cells(1, 1)
    .Ungroup
End With


'【Selection】を使う場合

'数値をグループ化
Range("A4").Select
Selection.Group Start:=0, End:=100, By:=20 '0~100を、20刻みでグループ化

'日付をグループ化
Range("A4").Select
'年、月、日でグループ化
Selection.Group Start:=True, End:=True, periods:=Array(False, False, False, True, True, False, True)

'グループ化の解除
Range("A4").Select
Selection.Ungroup

では、解説していきます。

VBAでピボットテーブルの「数値」をグループ化する

VBAで、ピボットテーブルの「数値」をグループ化してみます。

グループ化する箇所

グループ化する箇所は、「点数」ラベルです。

「点数」ラベルをグループ化したい

グループ化する「点数」ラベル

では、グループ化してみます。

数値を20点刻みでグループ化する

数値を20点刻みでグループ化するVBAコードは、こんな感じになります。

Sub TEST1()

    Range("A4").Select
    Selection.Group Start:=0, End:=100, By:=20 '0~100を、20刻みでグループ化
    
End Sub

「0~100」を「20」刻みで、グループ化します。

「点数ラベル」を選択してから、グループ化するのが、ポイントです。

では、VBAコードを実行してみます。

20点刻みでグループ化できた

点数ラベルを20点刻みでグループ化できた

点数ラベルを、「20」点刻みでグループ化できました。

DataRangeで数値をグループ化する

「DataRange」でラベルの位置を取得して、数値をグループ化する方法です。

「DataRange」を使うと、ピボットテーブルの位置が変わっても、同じVBAコードでグループ化できるので便利です。

DataRangeで数値をグループ化

DataRangeで数値をグループ化するVBAコードは、こんな感じになります。

Sub TEST2()

    With ActiveSheet.PivotTables(1).PivotFields("点数").DataRange.Cells(1, 1)
        .Group Start:=0, End:=100, By:=20 '0~100を、20刻みでグループ化
    End With
    
End Sub

では、実行してみます。

DataRangeを使って点数ラベルを20点刻みでグループ化できた

DataRangeを使って、点数ラベルを「20」点刻みでグループ化できました。

「DataRange」を使うイメージを解説します。

DataRangeで「点数」のフィールドを取得

DataRangeを使うと点数ラベルを、全て選択できます。

Sub TEST3()
    
    '「点数」ラベルを選択
    ActiveSheet.PivotTables(1).PivotFields("点数").DataRange.Select
    
End Sub

VBAコードを実行してみます。

DataRangeを使うと点数ラベルをすべて取得できる

DataRangeを使うと点数ラベルをすべて選択できました。

「.Cells(1, 1)」で絞りこむと、「点数ラベル」を「1セルだけ」選択できます。

Sub TEST4()
    
    '「点数」ラベルの、最初のセルを選択
    ActiveSheet.PivotTables(1).PivotFields("点数").DataRange.Cells(1, 1).Select
    
End Sub

VBAコードを実行してみます。

DataRangeを使って点数ラベルの最初のセルを取得できる

DataRangeを使って、「点数ラベル」の「最初のセル」を選択できました。

Groupでグループ化

あとは、「Group」を使って、グループ化します。

Sub TEST5()

    With ActiveSheet.PivotTables(1).PivotFields("点数").DataRange.Cells(1, 1)
        .Group Start:=0, End:=100, By:=20 '0~100を、20刻みでグループ化
    End With
    
End Sub

VBAコードを実行します。

DataRangeとGroupを組み合わせて点数ラベルをグループ化できる

DataRangeとGroupを組み合わせて、「点数ラベル」をグループ化できました。

どこでもグループ化できる

「DataRange」を使うメリットは、ピボットテーブルを移動しても、同じVBAコードでグループ化できることです。

ピボットテーブルを移動してみます。

ピボットテーブルを移動してみる

先ほどと同じVBAコードを実行してみます。

点数ラベルをグループ化できた

点数ラベルをグループ化できました。

「DataRange」を使って、ラベルの位置を特定すると便利です。

VBAでピボットテーブルの「日付」をグループ化する

次は、VBAで、ピボットテーブルの「日付」をグループ化してみます。

グループ化する箇所

グループ化する箇所は、この「日付」ラベルのところです。

日付ラベルをグループ化したい

ピボットテーブルの日付ラベルをグループ化したい

では、グループ化してみます。

日付を「年」「月」「日」でグループ化する

日付を「年」「月」「日」でグループ化するVBAコードは、こんな感じです。

Sub TEST6()

    With ActiveSheet.PivotTables(1).PivotFields("日付").DataRange.Cells(1, 1)
        '「年」「月」「日」でグループ化
        '引数⇒開始日、終了日、秒、分、時、日、月、四半期、年
        .Group Start:=True, End:=True, periods:=Array(False, False, False, True, True, False, True)
    End With
    
End Sub

引数は、「開始日、終了日、秒、分、時、日、月、四半期、年」の順番になっています。

引数を、「True」にすると、入力されていた値を、そのまま使うことができます。

では、VBAコードを実行してみます。

「年」「月」「日」でグループ化できた

日付を「年」「月」「日」でグループ化できた

日付を「年」「月」でグループ化する

日付を「年」「月」でグループ化するVBAコードは、こんな感じです。

Sub TEST7()

    With ActiveSheet.PivotTables(1).PivotFields("日付").DataRange.Cells(1, 1)
        '「年」「月」でグループ化
        '引数⇒開始日、終了日、秒、分、時、日、月、四半期、年
        .Group Start:=True, End:=True, periods:=Array(False, False, False, False, True, False, True)
    End With
    
End Sub

では、VBAコードを実行してみます。

「年」「月」でグループ化できた

日付を「年」「月」でグループ化できた

日付を「年」「月」でグループ化できました。

日付を「年」でグループ化する

日付を「年」でグループ化するVBAコードは、こんな感じです。

Sub TEST8()

    With ActiveSheet.PivotTables(1).PivotFields("日付").DataRange.Cells(1, 1)
        '「年」でグループ化
        '引数⇒開始日、終了日、秒、分、時、日、月、四半期、年
        .Group Start:=True, End:=True, periods:=Array(False, False, False, False, False, False, True)
    End With
    
End Sub

では、VBAコードを実行してみます。

「年」でグループ化できた

日付を「年」でグループ化できた

日付を「年」でグループ化できました。

Selectionで「日付」をグループ化する

Selectionを使っても同じように「日付」のグループ化ができます。

「年」「月」「日」でグループ化

日付を「年」「月」「日」でグループ化してみます。

Sub TEST9()
    
    Range("A4").Select
    '「年」「月」「日」でグループ化
    '引数⇒開始日、終了日、秒、分、時、日、月、四半期、年
    Selection.Group Start:=True, End:=True, periods:=Array(False, False, False, True, True, False, True)
    
End Sub

VBAコードを実行します。

日付を「年」「月」「日」でグループ化できた

日付を「年」「月」「日」でグループ化できました。

「年」「月」でグループ化

日付を「年」「月」でグループ化します。

Sub TEST10()
    
    Range("A4").Select
    '「年」「月」でグループ化
    '引数⇒開始日、終了日、秒、分、時、日、月、四半期、年
    Selection.Group Start:=True, End:=True, periods:=Array(False, False, False, False, True, False, True)
    
End Sub

VBAコードを実行します。

日付を「年」「月」でグループ化できた

日付を「年」「月」でグループ化できました。

「年」でグループ化

日付を「年」でグループ化します。

Sub TEST11()

    Range("A4").Select
    '「年」でグループ化
    '引数⇒開始日、終了日、秒、分、時、日、月、四半期、年
    Selection.Group Start:=True, End:=True, periods:=Array(False, False, False, False, False, False, True)
    
End Sub

VBAコードを実行します。

日付を「年」でグループ化できた

日付を「年」でグループ化できました。

VBAでピボットテーブルのグループ化を解除する

VBAで、ピボットテーブルのグループ化を「解除」してみます。

「点数」のグループ化を解除

「点数」ラベルのグループ化を解除するVBAコードは、こんな感じです。

Sub TEST12()
    
    With ActiveSheet.PivotTables(1).PivotFields("点数").DataRange.Cells(1, 1)
        .Ungroup 'グループを解除
    End With
    
End Sub

グループ化したピボットテーブルを用意しました。

グループ化したピボットテーブル

点数のラベルをグループ化したピボットテーブルを用意

VBAコードを実行します。

グループ化を解除できた

点数ラベルのグループ化を解除できた

点数ラベルのグループ化を解除できました。

「日付」のグループ化を解除

「日付」のグループ化を解除するVBAコードは、こんな感じになります。

Sub TEST13()
    
    With ActiveSheet.PivotTables(1).PivotFields("日付").DataRange.Cells(1, 1)
        .Ungroup 'グループを解除
    End With
    
End Sub

解除する手順は、同じですね。

グループ化したピボットテーブルを用意しました。

グループ化したピボットテーブル

日付ラベルをグループ化したピボットテーブルを用意

VBAコードを実行します。

グループ化を解除できた

日付ラベルのグループ化を解除できた

日付ラベルのグループ化を解除できました。

Selectionでグループ化を解除

ちなみに、Selectionでグループ化を解除する方法でもやってみます。

Sub TEST14()
    
    Range("A4").Select
    Selection.Ungroup 'グループを解除
    
End Sub

では、解除してみます。

「点数」ラベルのグループ化を解除

グループ化したピボットテーブルを用意しました。

点数のラベルをグループ化したピボットテーブルを用意

VBAコードを実行します。

点数ラベルのグループ化を解除できた

点数ラベルのグループ化を解除できました。

「日付」ラベルのグループ化を解除

グループ化したピボットテーブルを用意しました。

日付ラベルをグループ化したピボットテーブルを用意

VBAコードを実行します。

日付ラベルのグループ化を解除できた

日付ラベルのグループ化を解除できました。

おわりに

この記事では、VBAでピボットテーブルをグループ化する方法について、ご紹介しました。

グループする対象は、2つあります。

  • 数値
  • 日付

という感じです。

数値は、「1~100」点を、「20」点刻みでグループ化する、というようにグループします。

日付は、「年、月、日」や「年、月」、「年」でグループ化するといった感じです。

「グループ化」は、よく使う操作なので、VBAを使ってピボットテーブルの操作を自動化していきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す