マクロで複数のピポッドテーブルを作成する方法

このQ&Aのポイント
  • マクロを使用して自動的に複数のピポッドテーブルを作成する方法を学びたいです。
  • ピポッドテーブルを製品区分別、業種区分別、担当者別などで作成する方法を知りたいです。
  • マクロ初心者ですが、助けていただけると幸いです。
回答を見る
  • ベストアンサー

マクロでピポッドテーブルを複数作成

今ボタンを押下すると自動的にピポッドテーブルを作成するマクロを作成しています。 【Sample】 Sub ボタン2_Click() Dim r As Range With ActiveWorkbook 'With Sheets("案件一覧(DSG)").Select With .Sheets("案件一覧(DSG)") Set r = .Range("W2", .Range("B2").End(xlDown)) End With With .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=r.Address(external:=True)) With .CreatePivotTable(TableDestination:="") .AddFields RowFields:="製品区分" With .PivotFields("見込" & Chr(10) & "受注金額") .Orientation = xlDataField .Caption = "合計 : 金額" .Function = xlSum End With End With End With End With Set r = Nothing End Sub 上記のようなピポッドテーブルを新規”サマリー”ワークシートに作成し、同じデータ領域から同じ”サマリー”ワークシートに複数ピポッドテーブルを作成したいと考えています。 A1に作成した後はD1、H1という感じで上記では製品区分別の受注金額をサマリーしていますが、その他業種区分別や担当者別にピポッドテーブルが作成出来たらと思います。 マクロ初心者で今学習で申し訳ありませんが、どなたかご教授よろしくお願いいたします。 以上

  • emude
  • お礼率64% (9/14)

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

Sub test()   Dim ws As Worksheet   Dim r As Range   With ActiveWorkbook     Set ws = Worksheets.Add     With .Sheets("案件一覧(DSG)")       Set r = .Range("W2", .Range("B2").End(xlDown))     End With     With .PivotCaches.Add(SourceType:=xlDatabase, _                SourceData:=r.Address(external:=True))       With .CreatePivotTable(TableDestination:=ws.Range("A1"))         .AddFields RowFields:="製品区分"         With .PivotFields("見込" & Chr(10) & "受注金額")           .Orientation = xlDataField           .Caption = "合計 : 金額"           .Function = xlSum         End With       End With       With .CreatePivotTable(TableDestination:=ws.Range("D1"))         .AddFields RowFields:="製品区分"         With .PivotFields("見込" & Chr(10) & "受注金額")           .Orientation = xlDataField           .Caption = "合計 : 金額"           .Function = xlSum         End With       End With       With .CreatePivotTable(TableDestination:=ws.Range("H1"))         .AddFields RowFields:="製品区分"         With .PivotFields("見込" & Chr(10) & "受注金額")           .Orientation = xlDataField           .Caption = "合計 : 金額"           .Function = xlSum         End With       End With     End With   End With   Set r = Nothing   Set ws = Nothing End Sub 一例としてはこんな感じです。 PivotCachesをまず追加して、同じPivotCacheからCreatePivotTableを繰り返せば良いです。

emude
質問者

お礼

とても分かりやすかったです、丁寧な回答ありがとうございました。 ちなみにピポッドテーブルの集計要素が二つ(例:受注見込月と製品区分)の場合の見込受注金額をサマリーするにはどうすればよいのでしょうか? 五月雨式の質問で申し訳ありませんがよろしくお願いします。

その他の回答 (2)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

': With .CreatePivotTable(TableDestination:=ws.Range("A1"))   .AddFields RowFields:=Array("受注見込月", "製品区分"), _         PageFields:="受注年度"   .RowFields("受注見込月").Subtotals(1) = False   With .PivotFields("見込" & vbLf & "受注金額")     .Orientation = xlDataField     .Caption = "合計 : 金額"     .Function = xlSum   End With End With ': ヘルプも活用して、コードの意味を理解し、基本から押さえたほうが良いですよ。 #Office系ソフトカテゴリへマルチポストになっています。削除依頼を出しておいてください。

emude
質問者

お礼

多々ご教授ありがとうございました。 お陰で予定より早く作業の目処がたちました。昨日VBAの書籍を購入 しましたのでこれから基本を勉強してみます。 多重投稿は削除しておきました。 不慣れなものでご迷惑をおかけして申し訳ありません。 ありがとうございました。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

': With .CreatePivotTable(TableDestination:=ws.Range("A1"))   .AddFields RowFields:=Array("受注見込月", "製品区分")   '"受注見込月"ごとの集計が不要な場合は次行を非コメント   '.RowFields(2).Subtotals(1) = False   With .PivotFields("見込" & vbLf & "受注金額")     .Orientation = xlDataField     .Caption = "合計 : 金額"     .Function = xlSum   End With End With ': こんな感じ。 マクロの自動記録からでもわかると思いますが。

emude
質問者

お礼

早速のご回答ありがとうございます。 .RowFields(2).Subtotals(1) = False を .RowFields(1).Subtotals(1) = False にしたらうまくいきました。 まことに申し訳ありませんが、最後のお願いです。 受注見込月が複数年にまたがる可能性が出た為、受注年度を用意し、 ピポッドで絞込みをしようと思い、マクロの記録をやって見ました。 With ActiveSheet.PivotTables("ピボットテーブル66").PivotFields("受注年度")     .Orientation = xlPageField     .Position = 1 End With 上記を付け加えましたがエラーが解消されず困っています。 お手透きの際にでもご教授よろしくお願いします。

関連するQ&A

  • エクセル・マクロ CSVファイルの読込方法と改行

    マクロがうまく作成出来ずにいます。 是非、教えて頂けないでしょうか、宜しくお願い致します。 マクロでやりたい事は二つあります。 (1)あるシステムよりRドライブ内にデータを落とし、その後エクセルシートへ貼り付ける作業を行っているのですが、この作業をマクロで出来るようにしたいです。 ただ、データを落とした段階では拡張子表示にしても何もついていないデータになっていますが、中身からしておそらくCSV形式のデータだと思います。 (2)シート(1)、(2)、(3)にあるデータをシート(4)に順番に貼り付けていきたいのですが、(1)のシートのデータと(2)の間に空白の行を一行、(2)と(3)の間にも空白の行を一行としていきたいのです。 (2)に関しては途中までマクロを書いたのですが、エラーが出てうまくいきません。 作成したマクロは以下です。 Sheets("summary").Activate Range("A3").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.ClearContents 'AUD シート Sheets("AUD").Activate ActiveSheet.Range("A1").Select ActiveSheet.Range("A1:P1").Select ActiveSheet.Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("summary").Activate ActiveSheet.Range("A3").Select ActiveSheet.Paste With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With Application.CutCopyMode = False ActiveCell.Select ActiveSheet.Range(Selection.End(xlDown)).Select Cells.Replace What:=Chr(10), Replacement:="<br>" 最後の数行でエラーが出ます。 マクロの初心者でこんな事もわからないのかと思われるかもしれませんが、 どうぞ宜しくお願い致します。

  • Excel マクロ 別のファイルの情報をコピーして貼り付ける

    Excel 2007のマクロで、別のファイルの情報をコピーして貼り付ける マクロを作成しています。 別ファイルが1つであれば下記のマクロでできました。 他に別ファイルがもう1つあり、全部で2つのファイルからそれぞれ 必要なシートから情報をコピーしたいと思います。 ※各シート名は異なります。 別ファイルが2つになった場合、マクロをどのように記載すればよろしいでしょうか。 よろしくお願いいたします。 Sub Test1() Dim myCellall As Range Set myCellall = Sheets("すべて").Range("A1") With Workbooks.Open("\") With .Worksheets("すべて") .Range(.Range("A1"), .Cells.SpecialCells(xlCellTypeLastCell)).Copy myCellall End With .Close False End With End Sub

  • マクロが思うように動きません

    エクセル2007です。 初心者です。 マクロが思うように動きません。 指定のセルが空白の場合、msgboxを表示して、処理を抜ける 空白でない場合は、処理をつつける。 と言う事をしたいです。 with~の後が問題だと思うのですが・・ Sub 受注履歴書き込み() Dim ws01 As Worksheet, ws02 As Worksheet Dim r As Long, c As Integer, tmp As Long Set ws01 = Worksheets("受注書") Set ws02 = Worksheets("受注履歴") ws01.Activate With ws01 If .Range("C2").Value = "" _ And .Range("M2").Value = "" _ And .Range("M11").Value = "" _ And Worksheets("粗利報告書").Range("D3").Value = "" Then MsgBox "受注Noが空白です。処理を中止します。" Exit Sub ws02.Cells(r, 1).Value = .Range("C2").Value ' 受注No ws02.Cells(r, 9).Value = .Range("A40").Value ' 備考 ws02.Activate End If End With End Sub 採点願えますでしょうか? 宜しくお願い致します。

  • マクロを使って両面 部数設定をして印刷したい

    ぜひ教えてください。 エクセル2010です。 現在 下記で印刷していますがこれに 両面 部数設定U1 にて 印刷ができるようにしたいのです。 ぜひマクロを教えてください。 (マクロの知識がなく 下のマクロもコピーで使用しています) Sub 印刷() With Sheets("シート書") For num = .Range("s1").Value To .Range("t1").Value .Range("r7").Value = num .PrintOut Next num End With End Sub

  • EXCEL2000で作成したマクロが2007で動作しない

    EXCEL2000で作成したマクロがEXCEL2007上で動作しません。 2つのシートに入ったデータを,「抽出」シートにコピー後, 抽出条件に合わせて抽出するというものなのですが, 「Sheet1」で最終行を取得するところで,正しい範囲を 選択しません。どこが間違えているのか,ご指南頂けないでしょうか? お願いいたします。 下には,正しい結果が出ない所までを貼りつけました。 Sub フィルタオプション() Dim LastRow As Long, LastColumn As Long Dim myData As Range Dim myCriteria As Range Sheets("Sheet1").Select Rows("1:1").Select Selection.Copy Sheets("抽出").Select Rows("3:3").Select ActiveSheet.Paste If Worksheets("Sheet1").FilterMode = True Then   Worksheets("Sheet1").ShowAllData End If With Worksheets("Sheet1") LastRow = .Cells(Application.Rows.Count, "A").End(xlUp).Row End With Sheets("Sheet1").Select Range(Rows(2), Rows(LastRow)).Select Selection.Copy Range("A1").Select Sheets("抽出").Select Range(Rows(4), Rows(4)).Select Selection.Insert Shift:=xlDown

  • excel 文字抽出マクロの編集についてですが・・・

    マクロで指定した文字を含むデータを抽出するマクロを 作っていたのですが、うまく作動しません。 どこが悪いか教えてください。 Sub 指定した文字データの抽出() Dim strMoji As String strMoji = InputBox("検索文字を入力してください") strMoji = "*" & strMoji & "*" Sheets("Sheet2").Activate Cells.Clear With Sheets("Sheet1") .Range("A2").AutoFilter Filde:=3, criterial:=strMoji .Range("A2").CurrentRegion.Copy _ Destination:=Sheets("Sheet2").Range("A2") .Range("A2").AutoFilter End With Sheets("Sheet2").Columns("A:D").AutoFit End Sub

  • このマクロあっていますでしょうか?よろしくお願いいたします。

    ★sheetA Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$14" And Target.Address <> "$C$19" _ And Target.Address <> "$F$19" Then Exit Sub If Target.Address <> "$R$14" And Target.Address <> "$S$14" _ And Target.Address <> "$T$19" Then Exit Sub Application.EnableEvents = False With Sheets("B") .Range("F14").Value = Range("C14").Value .Range("F17").Value = Range("C19").Value .Range("F20").Value = Range("F14").Value .Range("F23").Value = Range("F19").Value End With With Sheets("C") .Range("F13").Value = Range("R14").Value .Range("F14").Value = Range("S14").Value .Range("F18").Value = Range("T19").Value End With Application.EnableEvents = True End Sub ★sheetB Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$14" And Target.Address <> "$F$17" _ And Target.Address <> "$F$23" Then Exit Sub Application.EnableEvents = False With Sheets("A") .Range("C14").Value = Range("F14").Value .Range("C19").Value = Range("F17").Value .Range("F19").Value = Range("F23").Value End With Application.EnableEvents = True End Sub ★sheetC Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$13" And Target.Address <> "$F$14" _ And Target.Address <> "$F$18" Then Exit Sub Application.EnableEvents = False With Sheets("A") .Range("R14").Value = Range("F13").Value .Range("S14").Value = Range("F14").Value .Range("T19").Value = Range("F18").Value End With Application.EnableEvents = True End Sub

  • マクロの簡素化

    下記マクロです。 Range("AE6:AE1005").Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone If Range("AD6").Value > 5 Then Range("AE6") = "*" Range("AE6").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD7").Value > 5 Then Range("AE7") = "*" Range("AE7").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD8").Value > 5 Then Range("AE8") = "*" Range("AE8").Select With Selection.Interior .ColorIndex = 3 End With Else End If 中略(セルを一個づつ指定しています) If Range("AD1004").Value > 5 Then Range("AE1004") = "*" Range("AE1004").Select With Selection.Interior .ColorIndex = 3 End With End If If Range("AD1005").Value > 5 Then Range("AE1005") = "*" Range("AE1005").Select With Selection.Interior .ColorIndex = 3 End With Else End If Range("AE3").Select 有るセルを参照しその値が5以上だったら別のセルに*マークとセルに色を付けるマクロですが、一個づつセル指定をしていますが、何とか短く出来ないでしょうか? お分かりになる方宜しくお願い致します。

  • マクロで教えてください。

    sheet1のA列にある図番を参照しsheet2のA列の機種名に適合する行全体に sheet1のB列にある色を塗りたいのですが、マクロを教えていただけますでしょうか? sheet2のBのセル色を塗るマクロはわかりました。↓です。 Sub macro1() Dim c As Range, myR As Variant With Sheets("Sheet2") For Each c In .Range("a2", .Cells(Rows.Count, "a").End(xlUp)) myR = Application.Match(c.Value, Sheets("sheet1").Columns(1), 0) If Not IsError(myR) Then c.Offset(, 1).Interior.ColorIndex = Sheets("sheet1").Cells(myR, "B").Interior.ColorIndex End If Next End With End Sub 上記マクロですとBセルのみ色が塗られてしまうので行全体を塗るマクロを教えてください。 よろしくお願い致します。

  • オートフィルタのマクロについて

    オートフィルタのマクロを組もうとしているのですが、フィルタ条件に別シートのセルの値を入れたいのですが、そこがどうもうまくいきません。 作成したマクロは以下の通りです。 Sub 累計計算マクロ() Dim aRange As Range, bRange As Range, i As Date Set aRange = Sheets("累計").Range("B1") Set bRange = Sheets("累計").Range("B2") i = aRange.Value Sheets("クイーンエステート").Activate Range("A13:L13").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:="<=i", Operator:=xlAnd End Sub どなたか助けてください! 宜しくお願い致します。

専門家に質問してみよう