[[20140316175140]] 『ピボットテーブルで列ラベルと値に配置するVBA』(たけみや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ピボットテーブルで列ラベルと値に配置するVBA』(たけみや)

超初心者ですが教えてください。
エクセル2010でピボットテーブルの作成をマクロで組みたいと思っています。

A   B
001  リンゴ
002  なし
003  すいか
001  みかん
003  リンゴ
002  すいか

上記のようなデータをピボットテーブルで
行ラベルにA、列ラベルと値にBを配置して

A リンゴ なし すいか みかん
001  1          1
002     1   1
003  1      1

というような形にしたいですがマクロで記録して実行すると
Bが値だけに配置されていて思ったようにできません
どのように修正すればいいか教えてください。

下記、マクロ全文です。
Sub Macro1()
'
' Macro1 Macro
'

'

   Dim ws As Worksheet
    Dim pvc As PivotCache
    Dim pvt As PivotTable
    Set ws = Sheets.Add
    Set pvc = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
                                            SourceData:="Sheet1!R1C1:R6C2")
    Set pvt = pvc.CreatePivotTable(TableDestination:=ws.Name & "!R3C1", _
                                            TableName:="ピボットテーブル1", _
                                            DefaultVersion:=xlPivotTableVersion10)
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("ピボットテーブル1")
        .InGridDropZones = True
        .RowAxisLayout xlTabularRow
    End With
    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("001")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("リンゴ")
        .Orientation = xlRowField
        .Position = 2
    End With
    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("リンゴ")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
        "ピボットテーブル1").PivotFields("リンゴ"), "データの個数 / リンゴ", xlCount
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 まず、一行目には見出しを付けましょう。
 A1に"番号"、B1に"品名"とあるとしてご提示のマクロ記録を元にすると
 こんな感じになると思います。

 また、値フィールドへの紐付けを最初に行わないと不具合が出るようです。
Sub Macro1()

    Dim ws As Worksheet
    Dim pvc As PivotCache
    Dim pvt As PivotTable
    Set ws = Sheets.Add
    Set pvc = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
                                            SourceData:="Sheet1!R1C1:R6C2")
    Set pvt = pvc.CreatePivotTable(TableDestination:=ws.Name & "!R3C1", _
                                            TableName:="ピボットテーブル1", _
                                            DefaultVersion:=xlPivotTableVersion10)

    Cells(3, 1).Select
    ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
        "ピボットテーブル1").PivotFields("番号"), "データの個数 / 番号", xlCount

    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品名")
        .Orientation = xlColumnField
        .Position = 1
    End With

    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("番号")
        .Orientation = xlRowField
        .Position = 1
    End With

End Sub

 こちらはさらにそれを加工したものです。ご参考までに。
Sub sample()
    Dim adr As String
    adr = Sheets(1).Name & "!" & Sheets(1).Range("a1").CurrentRegion.Address
    With ActiveWorkbook.PivotCaches.Add(xlDatabase, adr).CreatePivotTable(Sheets.Add.Range("a1"), "table1")
        .AddDataField .PivotFields("番号"), "個数", xlCount
        .PivotFields("品名").Orientation = xlColumnField
        .PivotFields("番号").Orientation = xlRowField
    End With
End Sub
(Jera) 2014/03/16(日) 18:38

Jera様

早々かつ明確なご回答有難うございます!!
おかげさまで解決致しました!!

本当にありがとうございます!!!!
(たけみや) 2014/03/16(日) 18:57


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.