[[20110505122134]] 『VBAでピボットテーブルを作成する際のレイアウト』(バーバラ) ページの最後に飛ぶ

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

 

『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さんのコードを見て一気に解決できました。

コメント返信:

[ 一覧(最新更新順) ]


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