[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.