『VBAでピボットテーブルを作成する際のレイアウト』(バーバラ) VBAでピボットテーブルを作成する際、列ラベルに「Σ値」をレイアウトする ためには、どのように記述すればいいか、教えていただけないでしょうか エクセル2007です。 ---- >列ラベルに「Σ値」をレイアウトするためには、どのように 本当に「Σ値」を「列ラベル」に入れるのですか? 普通、Σ値は「集計結果」が入るところなんですが・・・ 簡単なサンプルを使って、ご説明いただいた方がよさそうな気がします。 (半平太) 2011/05/05 14:30 ---- 半平太さん、レスありがとうございます。 つぎのようなデータがあるとします。 区分1はA1セルに入っています。 区分1 区分2 項目1 項目2 1 X1 100 200 2 X2 101 201 3 X3 102 202 4 X4 103 203 5 X5 104 204 これを、次のとおりフィールドのレイアウトをしたいです。 行ラベルに、区分1、区分2 Σ値に合計/項目1、合計/項目2 列ラベルに、Σ値 ピボットテーブルのウィザードで作ると自動的に上のようなレイアウトになってしまいます。 マクロの記録をすると、次のようになっています。 Sub Macro1() ' ' Macro1 Macro ' ' Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R6C4", Version:=xlPivotTableVersion12).CreatePivotTable _ TableDestination:="Sheet7!R3C1", TableName:="ピボットテーブル4", DefaultVersion _ :=xlPivotTableVersion12 Sheets("Sheet7").Select Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("区分1") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("区分2") .Orientation = xlRowField .Position = 2 End With ActiveSheet.PivotTables("ピボットテーブル4").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル4").PivotFields("項目1"), "合計 / 項目1", xlSum ActiveSheet.PivotTables("ピボットテーブル4").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル4").PivotFields("項目2"), "合計 / 項目2", xlSum With ActiveSheet.PivotTables("ピボットテーブル4") .InGridDropZones = True .RowAxisLayout xlTabularRow End With End Sub よろしくお願いいたします。 ---- > これを、次のとおりフィールドのレイアウトをしたいです。 >行ラベルに、区分1、区分2 >Σ値に合計/項目1、合計/項目2 >列ラベルに、Σ値 > >ピボットテーブルのウィザードで作ると自動的に上のようなレイアウトになってしまいます。 うーん (^^ゞ 私の読解力では「次の通りにしたいのに、その通りになってしまう」と云う 意味不明の日本語にしか読めないのですが。 (半平太) 2011/05/05 19:35 ---- すみません。わかりづらくて。 上のコードのうち「列ラベルに、Σ値」の部分を、どの記述で設定しているのかがわからないのです。 ---- >上のコードのうち「列ラベルに、Σ値」の部分を、どの記述で設定しているのかがわからないのです。 そう云うことでしたか、すみません m(__)m なるほど・・・、「出せ!」と云うコードがないのに出ています。 どうやら、複数のフィールドの合計を求めると自動的に3行目に挿入される様ですね。 ところで、それで何か不都合なのでしょうか?(お望み通りなのに・・・) (半平太) 2011/05/05 20:54 ---- こんにちは。 > 上のコードのうち「列ラベルに、Σ値」の部分を、どの記述で設定しているのかがわからないのです。 XL2007では、複数のフィールドをデータエリア(“Σ 値”の領域)に配置した場合、 それらは、特に位置を指定しなければデータフィールド(フィールドリストでの表示は、“Σ値”) として列ラベルの領域に表示されます。 XL2003までは、特に指定しなければ(規定のオートフォーマットの書式により)行ラベルの領域に表示されていました。 > 列ラベルに「Σ値」をレイアウトする という処理をどうしても書きたいなら With ActiveSheet.PivotTables(1) If .DataFields.Count > 1 Then '↓ .DataPivotField.Orientation = xlColumnField End If End With というような処理を書きますが、XL2007では、データフィールドを行エリアに 配置するのでなければほとんどの場合、書かなくて構いません。 なお、記録したコードを整理すれば次のように記述することができます。 Sub Macro1() With ActiveWorkbook 'Thisworkbook .Worksheets.Add With .ActiveSheet .Parent.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:=.Parent.Worksheets("Sheet1").Range("A1") _ .CurrentRegion.Address(External:=True), _ Version:=xlPivotTableVersion12).CreatePivotTable _ TableDestination:=.Name & "!R3C1" With .PivotTables(1) .PivotFields("区分1").Orientation = xlRowField .PivotFields("区分2").Orientation = xlRowField .AddDataField .PivotFields("項目1"), "合計 / 項目1", xlSum .AddDataField .PivotFields("項目2"), "合計 / 項目2", xlSum '↓どうしても書きたいのであればここに書きます。 .DataPivotField.Orientation = xlColumnField .InGridDropZones = True .RowAxisLayout xlTabularRow End With End With End With End Sub (OtenkiAme) ---- 半平太さん、OtenkiAmeさんご回答ありがとうございました。 記録したマクロの記述を整理している段階で出てきた疑問でした。 OtenkiAmeさんのコードを見て一気に解決できました。