データを扱う時のいろいろな操作 2

■ Excel豆知識44 豆知識44 Excel_mame44
ピボットテーブル書式サンプル Excel_mame44_pivot_





44-1 ピボットテーブルの書式設定
Excel豆知識44作成にあたってのメモをこちらに書きました。(^^ゞ

豆知識29でSUMPRODUCT関数を使って作った集計表と同じものを、豆知識31ではピボットテーブ
ルで作ってみました。でも、ピボットテーブルを更新したあとも罫線を維持することは、その
設定では出来ませんでした。
image04401.png
今回は、その罫線の維持も含めて、ピボットテーブルの書式についてご紹介してみようと思
います。ただ、更新したあとも維持できる罫線の設定は、繰り返しの作業が必要で、とても
面倒ではあります。でも、「面倒でもやれば出来る」ということと、「出来ないと思って諦
める」ということは大違いですのでご紹介しようと思いました。

なお、いつもの豆知識の形式の説明のほかに、Tasanさんが作ってくださった「マクロで実感
するピボットテーブルの書式設定」のコードをご紹介いたしますので、是非、マクロを実行
してみてください。コード実行の際、画面の更新を止めていませんので、ピボットテーブル
に次々と書式が設定されていく様子をご覧いただけると思います。


次のピボットテーブルの書式に関するヘルプやMicrosoftの記事を参考にしております。
・ピボットテーブル レポートのデータを選択するピボットテーブル レポートの書式を設定するピボットテーブルおよびピボットテーブル レポートの書式に関する注意


今回のポイントのひとつは上記のヘルプ記事にある「ピボットテーブル レポートのデータを
選択する」ことです。「選択」して、フォント、背景色、罫線等の書式を設定することによっ
て、書式を維持します。
「ピボットテーブル レポートのデータを選択する」ヘルプより
[図04402]

今回も豆知識31と同じように、豆知識29でSUMPRODUCT関数を使って作った集計表と同じものを
作りますが、豆知識31とは別の手順で作成したいと思います。


(1)ピボットテーブル ウィザード3/3のレイアウトを使ってフィールドを設定する。

今まではウィザードの3/3ですぐに「完了」をクリックして、シートにピボットテーブルの枠
を表示させそこでフィールドの設定をする方法をご紹介してきましたが、今回はこの3/3の
「レイアウト」や「オプション」で設定してみたいと思います。

「レイアウト」をクリックすると、下図のように「ピボットテーブル/ピボットグラフ ウィザ
ード-レイアウト」が出ますので、そこの説明にあるようにして	
 「行」エリアに「受付日」と「受付支店」を
 「列」エリアに「講座名」を
 「データ」エリアに「氏名」を
ドラッグします。
ピボットテーブルウィザードのレイアウトで設定
[図04403]

データエリアに文字列の「氏名」をドラッグしましたので集計の方法は「データの個数」
となっています。今回は求めたいのが「データの個数」ですが、ここで「合計」など別の集計
方法を選択したい場合はレイアウト上の「データの個数/氏名」のところをダブルクリックし
て、下図のフィールドの設定画面を出します。

今回はここで表示形式をクリックし、「桁区切りありの数値」に設定します。
(サンプルデータでは数字が小さいのであまり意味がありませんが。^^; )

「OK」を3箇所クリックしてウィザードの3/3に戻ります。
レイアウトの画面からフィールドの設定を
[図04404]



(2)ピボットテーブル ウィザード3/3の「オプション」で好みの設定をする。

(ピボットテーブルを作った後で設定することも勿論できます。)

今回はここの「空白セルに表示する値」に入っているチェックをはずして、空白セルにゼロ
を表示させるようにします。(デフォルトではチェックが入っていて、その右のボックスが
空欄なので空白セルには何も入らない設定になっています。)

また、ここの「書式の保持」のチェックがはずれていると、いくら設定しても書式は保持さ
れませんのでチェックが入っていることを確認してください。(デフォルトでチェックが入
っています。)
ピボットテーブルウィザードのオプションから設定する
[図04405]

「OK」「完了」をクリックすると、下図のようなピボットテーブルになります。
ピボットテーブル
[図04406]



(3)「年」「月」「日」で日付をグループ化する。

豆知識31では「年」「月」でグループ化しましたが、今回はそれに「日」でもグループ化し
てみます。
今作成している集計表では「日」でグループ化しなくても目的は達せられますが、後ほどご紹介するサン
プルマクロのように「対象月を絞り込んで日計をとりたい」という場合は「日」でグループ化する必要が
あります。
ピボットテーブルの日付を年・月・日でグループ化
[図04407]

すると、下図のようになります。
「年」「月」だけの場合は月の項目名が「受付日」となってしまいますが、「日」でもグル
ープ化すると「年」「月」「受付日」という項目名になります。
ピボットテーブル 日付のグループ化をした結果
[図04408]

また、「日」でグループ化すると、下図のように受付日に「1月1日」から「12月31日」
までの日付がアイテムとして用意されます。(これを利用した365日分のシート作成をあとでご紹介
します。)
ピボットテーブル 「日」でグループ化すると365日のアイテムが用意される
[図04409]

(4)個々のセクションを選択して書式を設定

「年」「月」は、このあとページエリアへ移動させますが、移動したあとでは書式を設
定できませんので行エリアで背景色を設定します。

その時、マウスでただセル範囲を選択するのではなく、はじめにヘルプを引用してご紹介し
たピボットテーブルのデータを選択するやり方で選択します。(これがそのあと書式を維持
するためのポイントです。)

ただし、この時、ピボットテーブルを選択した状態で、ピボットテーブルのメニューの
「選択」で「選択範囲を有効にする」が下図1のようにチェックが入った状態になって
いることが必要です。(デフォルトでは有効になっています。)
もし、下図2のようになっていたらそこをクリックして下図1の状態にしてください。
ピボットテーブルの選択範囲を有効にする
[図04410]


「年」の項目セルの上端にマウスポインタを近づけると、ポインタが下図のように太い↓に
なります。その状態でクリックすると、「年」のラベルが選択されます。
ピボットテーブルの行ラベルを選択
[図04411]

そこに薄い黄色をつけます。
同様にして「月」のラベルを選択します。
ピボットテーブルの行ラベルに色をつける
[図04412]

そこにも薄い黄色を設定します。
次に同様にして「受付日」のラベルを選択します。
今度はちょっと雰囲気が変わって、集計でない「日」のラベルが選択されます。
ピボットテーブルの行ラベルの日付を選択
[図04413]

そこにも薄い黄色を設定します。
(「日」はあとで非表示にしてしまいますので、しなくてもいいのですが、ちょっと練習です。^^; )
ピボットテーブルの行ラベルの日付に色をつける
[図04414]



(5)集計行を選択する。

受付日の集計行を選択する場合は、下図のように集計の行の左端にマウスポインタを置くと
ポインタが太い→になり、全部の集計行が選択されます。
(そこでクリックを繰り返すと、いろいろな選択状態が繰り返されますので試してみてください。)
ピボットテーブルの集計行を選択
[図04415]

練習に、ここには橙色を設定してみます。
ピボットテーブルの集計行に色をつける
[図04416]



(6)「受付日」を非表示にする。

「受付日」の項目セルで右クリックし、「表示しない」とします。(これは結局「受付日」の項
目をピボットテーブル外へドラッグしてフィールドを削除するのと同じです。)レイアウトからはずし
た時点で書式設定もなくなります。(更新や上書きをする前なら「戻る」で戻せます。)
ピボットテーブル 行の日付けのアイテムを非表示に
[図04417]



(7)「年」と「月」をページエリアに移動させる。

「年」の項目をマウスで掴んでページエリアへドラッグ。
ピボットテーブルの行のアイテムをページフィールドへ
[図04418]

「月」の項目をマウスで掴んでページエリアの「年」の下へくるようにドラッグ。
ピボットテーブルの行のアイテムをページフィールドへ
[図04419]

下図のように年月がページエリアへ移動し、セルにも薄い黄色がついています。
ピボットテーブルのページフィールドの色の設定
[図04420]



この時、年のアイテムや月のアイテムに "<2006/1/16" と ">2006/12/29" という余計なものが
あります。
余計なアイテム
[図04420-2]


「年」ラベルをダブルクリックし、「表示しないアイテム」でそれらを選択して「OK」とすると、
余計なアイテムが表示されなくなります。
表示しないアイテムの設定
[図04420-3]


同様に「月」ラベルをダブルクリック。
表示しないアイテムで "<2006/1/16" と ">2006/12/29" をクリックして「OK」。
表示しないアイテムの設定
[図04420-4]



(8)項目名の変更やアイテムの並べ替え。

「データの個数/氏名」の表示を「受付件数」に変更したり、受付支店や講座名の並べ替えは
豆知識31と同じ方法で行ないます。(過程は省略)
項目名の変更やアイテムの並べ替え
[図04421]



(9)列幅を保持するために。

セルの書式とはちょっと違いますが、表の書式には列幅も結構重要だったりします。

下図のような場合に総計のG列の幅を他のデータの列と同じに広げた後で、ピボットテーブル
の更新をすると、
ピボットテーブルの更新
[図04422]

下図のように列幅が戻ってしまいます。
ピボットテーブル 列幅が戻る
[図04423]

なので、ピボットテーブルのオプションの「表のオートフォーマット」のチェックをはずし
ます。「書式の保持」のチェックの有無にかかわらず、「表のオートフォーマット」のチェ
ックをはずすと自分で設定した列幅を維持することができます。

「表のオートフォーマット」にチェックを入れておくと、レイアウトを変えても列幅がオートフィットさ
れますので、状況に応じた設定をなさってください。
表のオートフォーマットのチェックをはずして列幅を保持
[図04424]

今度は更新しても下図のように列幅は保持されました。
ピボットテーブルの列幅の保持
[図04425]



(10)「講座名」のラベルを選択して、背景色を薄い水色にし、中央揃えに。

「講座名」のラベルを選択するには「講座名」の項目セルの上端にマウスポインタをもって
いき太い↓になったらクリックします。下図の範囲が選択されますので、色を設定し、中央
揃えにします。
列のアイテムのラベルを選択
[図04426]



(11)「受付支店」のラベルを選択して、背景色を薄い水色に。

「受付支店」のラベルを選択するには「受付支店」の項目セルの上端にマウスポインタをもっ
ていき太い↓になったらクリックします。下図の範囲が選択されますので、色を設定します。
行のアイテムのラベルを選択
[図04427]



(12)「総計」を選択して背景を薄い緑に。
総計に色をつける
[図04428]



(13)データの数字を太字に設定する。
(これは後で戻します。練習だけです。^^;)

ピボットテーブル全体を選択。
ピボットテーブル全体を選択
[図04429]

右クリックし、メニューから「選択」-「データ」をクリック。
「選択」-「データ」でデータのみを選択
[図04430]

すると、データ範囲が選択されますので、フォントを「太字」に設定。
データのフォントを太字に
[図04431]



(14)罫線をひとつひとつのアイテム毎に設定する。

今までの設定は結構その範囲全体を対象にすることが出来ましたが、罫線はそうはいきませ
ん。ひとつひとつのアイテム毎に選択して、設定する必要があります。また、ピボットテー
ブルを更新しても維持されるのは周囲の罫線のみで、内側の罫線は維持されません。
(ラベル毎、アイテム毎に設定すれば、行方向に設定すると横罫線が、列方向に設定すると
縦罫線が保持されます。)
	 
「世田谷支店」のラベルとデータを選択して「外枠」の罫線を設定。
ピボットテーブルに維持できる罫線を設定
[図04432]

上と同様にして、「品川支店」「墨田支店」「大田支店」にも罫線を設定。
アイテム毎に罫線の設定を繰り返す
[図04433]

行方向の横罫線が設定されました。
行方向の横罫線が設定された
[図04434]

次は列方向です。
「英会話」のラベルとデータを選択して、罫線を設定。
列方向の罫線を設定
[図04435]

上と同様にして「パソコン教室」「茶道」「陶芸」「彫金」にも罫線を設定。
列方向のアイテム毎に罫線の設定を繰り返す
[図04436]

これで全体に罫線が設定されました。
この状態でピボットテーブルの更新をしても、罫線は維持されます。^^

ただ、このようにひとつひとつのアイテムに対して設定をしなければなりませんので、今回
のような少ないアイテムの場合は手作業でも設定可能ですが、後でご紹介するサンプルデー
タのようにアイテムが多くなったら、罫線の設定はマクロの作業にするのが現実的かと思い
ます。
全体に罫線が設定された
[図04437]



(15)ページフィールドで年月を指定する。

ページフィールドで「2006年」と「9月」を選択します。
ページフィールドでアイテムを選択
[図04438]

すると、下図のようにデータのない「陶芸」や「彫金」のアイテムが非表示になってしまい
ました。なので、データのない「講座名」でも項目が表示されるように設定します。
データのないアイテムが非表示に
[図04439]

「講座名」のラベルのところで右クリック。「フィールドの設定」の「データのないアイテ
ムを表示する」にチェックを入れ「OK」。「受付支店」も同様に設定。
フィールドの設定で「データのないアイテムを表示する」にチェックを入れる
[図04440]

これで、何月を選択しても、いつも同じ形の集計表になります。
データのないアイテムが表示された
[図04441]

データの更新をやってみます。
データを更新
[図04442]

今までのすべての設定が保持されています。^^
すべての書式が保持されている
[図04443]

さて、ここでデータ範囲の数字の太字は練習だったので設定を解除します。
設定時と同様にデータ範囲を選択して、標準の太さにします。
(この設定はページフィールドで9月を選択していた状態で行なっても、すべての月に反映されました。)
データ範囲の太字を解除
[図04444]

(16)「総計」のラベルを中央揃えに。

「総計」のラベルを中央揃えにするのを忘れていました。
総計のラベルが左揃え
[図04445]

「総計」の上端にマウスポインタをおき、総計を選択。
総計を選択
[図04446]

その状態で右クリックし、メニューの「ラベル」をクリック。
総計のラベルを選択
[図04447]

「総計」のラベルのみが選択されますので、中央揃えに。
総計のラベルを中央揃えに
[図04448]

ここで「5月」を選択してみます。
ページフィールドで別アイテムを選択
[図04449]

すると、中央揃えにしたはずの「総計」がまた左揃えになってしまいました。^^;
上の9月で設定した図を良く見ると、ページフィールドのところが灰色になっています。
これは今「2006年」「9月」の「総計」を選択しているんだよ、ということを表しています。
つまり9月だけの総計に中央揃えを設定していたということです。
別のアイテムを選択すると総計のラベルが左揃えに戻る
[図04450]

なので、ページフィールドを一旦「すべて」にします。
ページフィールドで一旦すべてを選択
[図04451]

そうしてから、先程と同じようにして列の「総計」、行の「総計」のラベルを中央揃えにし
ます。
すべてを表示させた状態で総計のラベルを中央揃えに
[図04452]

これで出来上がりです。
SUMPRODUCT関数を使って作成した集計表とほぼ同じ集計表が出来上がりました。
集計表の出来上がり
[図04453]




さて、長い長い前置きでしたが、いよいよTasanさんに作っていただいたピボットテーブルの
書式設定のサンプルマクロのご紹介です。

新規ブックのVBEに下記のコードをコピペして実行していただいてもいいですし、ダウンロー
ド用の「Excel_mame44_Pivot_」ブックで「ピボットテーブル作成」というボタンをクリック
していただいてもいいですので、是非実行してみてください。

新規ブックで実行すると、まず最初に左端のシートにサンプルデータが作成され、そのデータ
をもとにその右のシートにピボットテーブルが作成されます。そして、いろいろなレイアウト
で書式が設定され、日付のグループ化が行なわれます。

コードをステップ実行させると、どういうふうにして設定しているか良くわかってとても面白
いです。
また、コードの中にはピボットテーブルをマクロで使う際のいろいろな工夫が満載ですので、
興味のある方は是非じっくりご覧いただきたいと思います。




Option Explicit

Sub PvtTbl_Sample()

'変数の宣言
    Dim DataSht As Worksheet   'データシート
    Dim PvtSht As Worksheet    '集計表シート
    Dim PvtTbl As PivotTable   'ピボットテーブル
    Dim ListNo As Long         'ユーザー設定リストの数
    Dim PvtLabel As Variant    'フィールドラベル
    Dim PvtSelect As Variant   'レイアウトエリアの選択場所
    Dim PvtFld As PivotField   'ピボットフィールド
    Dim PvtItem As PivotItem   'ピボットアイテム
    Dim PvtBorder As Variant   '罫線の位置
    Dim ColorNo1 As Long       '罫線の色1
    Dim ColorNo2 As Long       '罫線の色2
    Dim myYear As String       '日付の表示年
    Dim myMonth As String      '日付の表示月

'シートの準備
    With ThisWorkbook
        On Error Resume Next
        Set DataSht = .Worksheets(1)
        DataSht.Name = "データ"
        Set PvtSht = .Worksheets(2)
        If PvtSht Is Nothing Then
            Set PvtSht = .Worksheets.Add(After:=.Worksheets(1))
        End If
        PvtSht.Name = "集計表"
        PvtSht.Cells.Clear
        On Error GoTo 0

'ピボットテーブル用の書式スタイル(MSゴシック、太字、11ポイント)を作成
        On Error Resume Next
        .Styles("PvtFontStyle").Delete
        On Error GoTo 0
        .Styles.Add Name:="PvtFontStyle"
        With .Styles("PvtFontStyle")
            .IncludeNumber = False
            .IncludeFont = True
            .IncludeAlignment = False
            .IncludeBorder = False
            .IncludePatterns = False
            .IncludeProtection = False
            With .Font
                .Name = "MS Pゴシック"
                .Size = 11
                .Bold = True
            End With
        End With

    End With

'計算方法を手動にする
    Application.Calculation = xlCalculationManual

'サンプルデータを作成する
    With DataSht
        .Cells.Clear
        .Range("A1:E1").Value = Array("入荷日", "入荷地", "品名", "数量", "金額")
        .Range("B2:B1001").Value = _
            "=CHOOSE(MOD(INT(RAND()*10),5)+1,""函館"",""成田"",""横浜"",""神戸"",""門司"")"
        .Range("C2:C1001").Value = _
            "=CHOOSE(MOD(INT(RAND()*10),5)+1,""レモン"",""バナナ"",""パイナップル"",""グレープフルーツ"",""オレンジ"")"
        .Range("D2:D1001").Value = "=INT(((RAND()*10)+1))*10"
        .Range("E2:E1001").Value = "=INT(((RAND()*10)+1))*1000"
        .Range("A1001").Value = Date
        .Range("A1001").AutoFill _
            Destination:=.Range("A802:A1001"), Type:=xlFillWeekdays
        .Range("A802:A1001").Copy _
            Destination:=Application.Union(.Range("A602"), _
                .Range("A402"), .Range("A202"), .Range("A2"))
        With .Range("A:A").SpecialCells(xlCellTypeConstants, 1)
            .Sort Key1:=.Range("A1"), Order1:=xlAscending, _
                Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
                Orientation:=xlTopToBottom, SortMethod:=xlPinYin
            .NumberFormatLocal = "ge.m.d"
        End With
        .Range("A1").CurrentRegion.Name = "Database"
        myYear = Year(Application.WorksheetFunction.Max(.Range("A:A"))) & "年"
        myMonth = Month(Application.WorksheetFunction.Max(.Range("A:A"))) & "月"
    End With

'イベント処理を無効にする
    Application.EnableEvents = False

'ピボットテーブルを作成する
    Set PvtTbl = DataSht.PivotTableWizard(TableDestination:=PvtSht.Range("A1"))
    Set DataSht = Nothing

'フィールドリストを表示させない
    With Application.CommandBars("PivotTable")
        .Visible = True
        If Val(.Parent.Version) >= 10 Then
            ActiveWorkbook.ShowPivotTableFieldList = False
        ElseIf .Controls(13).Caption <> " " Then
            .Controls(10).Execute
        End If
    End With

'ピボットテーブルでの作業
    With PvtTbl

'書式の保持を有効にする
        .PreserveFormatting = True

'============================================================
'最初のレイアウトを設定する
        .AddFields RowFields:="品名", ColumnFields:="入荷地"

'画面の更新を止める
'    Application.ScreenUpdating = False

'ピボットテーブルの範囲に"PvtFontStyle"を適用する
        .PivotSelect "", xlDataAndLabel
        Selection.Style = "PvtFontStyle"

'数量をデータエリアに配置する
        With .PivotFields("数量")
            .Orientation = xlDataField
            .Caption = "数量合計"
            .Function = xlSum
            .NumberFormat = "#,##0_ "
        End With

'入荷地をユーザー設定で並べ替える
        On Error Resume Next
        Application.AddCustomList _
            ListArray:=Array("函館", "成田", "横浜", "神戸", "門司")
        On Error GoTo 0
        ListNo = Application.CustomListCount
        .ColumnRange.Sort Order1:=xlAscending, _
            Type:=xlSortLabels, OrderCustom:=ListNo + 1, _
            Orientation:=xlLeftToRight, SortMethod:=xlStroke
        Application.DeleteCustomList ListNum:=ListNo

'罫線に使う色の設定
        ColorNo1 = 7 'ピンク(普通の実線に適用)
        ColorNo2 = 1 '黒(太目の実線に適用)

'表示フィールドのデータ及びラベルエリアに対して罫線を引く
        For Each PvtFld In .VisibleFields
            For Each PvtItem In PvtFld.PivotItems
                .PivotSelect PvtItem, xlDataAndLabel
                For Each PvtBorder In Array(xlEdgeBottom, xlEdgeRight)
                    With Selection.Borders(PvtBorder)
                        .Weight = xlThin
                        .ColorIndex = ColorNo1
                    End With
                Next PvtBorder
            Next
        Next

'============================================================
'レイアウトを変更する
        .AddFields RowFields:=Array("入荷日", "品名"), _
                                    ColumnFields:="入荷地"

'各ラベルのラベルエリアとデータエリアに対して太線を引く
        For Each PvtLabel In Array("", "入荷地[All]", _
                "品名[All]", "入荷日[All]", _
                "'Row Grand Total'", "'Column Grand Total'")
            For Each PvtSelect In Array(xlLabelOnly, xlDataOnly)
                .PivotSelect PvtLabel, PvtSelect
                For Each PvtBorder In Array(xlEdgeLeft, _
                        xlEdgeTop, xlEdgeBottom, xlEdgeRight)
                    With Selection.Borders(PvtBorder)
                        .Weight = xlMedium
                        .ColorIndex = ColorNo2
                    End With
                Next PvtBorder
            Next PvtSelect
        Next PvtLabel

        .PivotSelect "", xlOrigin
        With Selection.Borders(xlEdgeBottom)
            .Weight = xlMedium
            .ColorIndex = ColorNo2
        End With

'各ラベルの書式設定をする
        For Each PvtLabel In Array("入荷地[All]", "入荷日[All]", "品名[All]")
            .PivotSelect PvtLabel, xlDataOnly
            Selection.Interior.ColorIndex = 35 '薄い緑
        Next PvtLabel

        .PivotSelect "入荷地[All]", xlLabelOnly
        Selection.Interior.ColorIndex = 15 '25% 灰色
        Selection.Font.ColorIndex = 41 '薄い青

        .PivotSelect "品名[All]", xlLabelOnly
        Selection.Interior.ColorIndex = 50 'シーグリーン
        Selection.Font.ColorIndex = 2 '白

        .PivotSelect "入荷日[All]", xlLabelOnly
        Selection.Interior.ColorIndex = 36 '薄い黄色

'総計エリアの書式設定をする
        For Each PvtLabel In Array("'Column Grand Total'", _
                                        "'Row Grand Total'")
            .PivotSelect PvtLabel, xlDataAndLabel
            Selection.Interior.ColorIndex = 44 'ゴールド

            .PivotSelect PvtLabel, xlDataOnly
            Selection.Font.ColorIndex = 41 '薄い青

            .PivotSelect PvtLabel, xlLabelOnly
            Selection.HorizontalAlignment = xlCenter
        Next PvtLabel

'入荷日の集計行に書式設定する
        .PivotSelect "入荷日[All;Total]", xlDataAndLabel
        Selection.Interior.ColorIndex = 2 '白
        Selection.Font.ColorIndex = 1 '黒

'============================================================
'レイアウトを変更する
        .PivotFields("入荷地").Orientation = xlRowField

'罫線の補正とラベルの書式設定をする
        For Each PvtLabel In Array("入荷地[All]", "品名[All;Total]")
            .PivotSelect PvtLabel, xlLabelOnly
            For Each PvtBorder In Array(xlEdgeLeft, xlEdgeBottom)
                With Selection.Borders(PvtBorder)
                    .Weight = xlMedium
                    .ColorIndex = ColorNo2
                End With
            Next PvtBorder
        Next PvtLabel

        .PivotSelect "入荷日[All;Total]", xlDataOnly
        With Selection.Borders(xlEdgeTop)
            .Weight = xlMedium
            .ColorIndex = ColorNo2
        End With

'背景色とフォント色を変更する
        .PivotSelect "品名[All;Total]", xlDataAndLabel
        With Selection
            .Interior.ColorIndex = 34 '水色
            .Font.ColorIndex = 10 '緑
        End With

'============================================================
'レイアウトを変更する
'行フィールドの"品名"と"入荷地"表示位置を入れ替える
        With .PivotFields("品名")
            .Orientation = xlRowField
            .Position = 3
        End With

'罫線の補正とラベルの書式設定をする
        .PivotSelect "入荷地[All;Total]", xlDataAndLabel
        With Selection
            For Each PvtBorder In Array(xlEdgeLeft, xlEdgeBottom)
                With .Borders(PvtBorder)
                    .Weight = xlMedium
                    .ColorIndex = ColorNo2
                End With
            Next PvtBorder
            .Interior.ColorIndex = 2  '白
            .Font.ColorIndex = 3 '赤
        End With

'============================================================
'レイアウトを変更する
'入荷地フィールドを行エリアに残し、品名フィールドを列エリアへ移動する
        .PivotFields("品名").Orientation = xlColumnField

'罫線の補正とラベルの書式設定をする
        .PivotSelect "入荷日[All;Total]", xlDataOnly
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 1
        End With
        .PivotSelect "'Row Grand Total'", xlDataAndLabel
        With Selection.Borders(xlEdgeLeft)
            .Weight = xlMedium
            .ColorIndex = ColorNo2
        End With

'============================================================
'レイアウトを変更する
        .AddFields RowFields:=Array("入荷日", "品名"), _
                                    ColumnFields:="入荷地"

'日付をグループ化させて集計
'処理の内容:入荷日を月と年でグループ化させ、最新月のみ絞り込んで集計する

'日付をグループ化する
        .TableRange1.Range("A2").Group _
            Start:=True, End:=True, Periods:=Array(False, _
                False, False, True, True, False, True)

'グループ化した年と月をページエリアに移動する
        .PivotFields("月").Orientation = xlPageField
        .PivotFields("年").Orientation = xlPageField

'年と月の非表示アイテムを設定し、表示アイテムを指定する
        With .PivotFields("年")
            .PivotItems(1).Visible = False
            .PivotItems(.PivotItems.Count).Visible = False
            .CurrentPage = myYear
        End With
        With .PivotFields("月")
            .PivotItems(1).Visible = False
            .PivotItems(.PivotItems.Count).Visible = False
            .CurrentPage = myMonth
        End With

'処理終了
        .TableRange1.Range("A1").Select

'イベント処理を有効にし、自動計算モードにする
        Application.EnableEvents = True
        Application.Calculation = xlCalculationAutomatic

'ピボットテーブルを更新する
        .RefreshTable

    End With

'オブジェクト変数の解放
    Set PvtTbl = Nothing
    Set PvtSht = Nothing

'画面表示を更新する
    'Application.ScreenUpdating = True

End Sub

ページTOPへ