マクロでピボットテーブルを作成するには?

このQ&Aのポイント
  • エクセルのマクロを使用してピボットテーブルを作成したい場合、VBAコードを使って範囲の指定や要素の集計を行うことができます。
  • 具体的には、データの範囲を選択してピボットキャッシュを作成し、ピボットテーブルを作成することで、要素ごとの集計値を簡単に表示することができます。
  • ただし、コード中の「参照が正しくありません」というエラーが出る場合は、データの範囲を正しく指定しているかやピボットテーブル名を重複していないかなどを確認する必要があります。
回答を見る
  • ベストアンサー

マクロでピボットテーブルを作成するには?

現在、仕事の関係でエクセルを多用しており、 仕事を楽にするためマクロを勉強しています。 インターネットを駆使して、下記のコードを作ってみたのですが、 【】の範囲で「参照が正しくありません」とエラーが出てしまいます。 どこがおかしいかご教授いただけますでしょうか? 自動記録でベースを作った後、範囲の指定を VBA上で行ったつもりです。 データの集計は「A」シートのA~G列まで、行は不定なので、 「A」シートの一番下までのデータを集計するようにしたいです。 縦に「要素」、内容に「金額」を集計するよう、 ピボットを記録しています。 Sub ピボットを行う() ' Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select 【 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "A!Selection.Address").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル1"】 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="要素" With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("金額") .Orientation = xlDataField .Caption = "合計 : 金額" .Function = xlSum End With End Sub よろしくお願いいたします。

noname#200584
noname#200584

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

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。 >(SourceType:=xlDatabase, SourceData:="A!Selection.Address") ここを (SourceType:=xlDatabase, SourceData:= Selection.Address(external:=True)) と変更すればできます。 ついでに、SelectやActivateは選択状況に依存し、不安定です。 ActiveWorkbookは仕方ないのかもしれませんが Sub sample()   Dim r As Range   With ActiveWorkbook     With .Sheets("A")       Set r = .Range("G1", .Range("A1").End(xlDown))     End With     With .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=r.Address(external:=True))       With .CreatePivotTable(TableDestination:="")         .AddFields RowFields:="要素"         With .PivotFields("金額")           .Orientation = xlDataField           .Caption = "合計 : 金額"           .Function = xlSum         End With       End With     End With   End With   Set r = Nothing End Sub などとしたほうが良いかも^ ^ QNo.2097393も参考にしてみてください。

noname#200584
質問者

お礼

ご回答、ありがとうございました。 教えて頂いたマクロで出来るようになりました。大変助かります。 後学のため、コメントを載せようと思っているのですが、 頂いたマクロにて不明点がいくつかあります。 (下記コメントの(1)~(4)です) いつでも結構ですので、ご返答頂けないでしょうか? (分かる範囲で自分で記載しています) Sub sample() Dim r As Range '(1)この式は何のためですか?? With ActiveWorkbook  With .Sheets("A") 'Aシートを選ぶ  Set r = .Range("G1", .Range("A1").End(xlDown)) 'G1からA1の最下層までを選択 End With With .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=r.Address(external:=True)) '(2)ピボットの範囲はドコに記入されているのですか?? With .CreatePivotTable(TableDestination:="")  .AddFields RowFields:="要素" 'ピボットの横列に要素を選択  With .PivotFields("金額")  'ピボットの内容に金額を選択 .Orientation = xlDataField .Caption = "合計 : 金額"  '金額を合計にする .Function = xlSum End With '(3)End Withが四つも並ぶのはなぜですか? End With End With End With Set r = Nothing '(4)この式の意味が分かりません End Sub  仕事で忙しい中の独学だと限界があるようです。。。 初歩的な質問かも知れませんが、ご回答頂ければ幸いです。

その他の回答 (2)

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.3

■(2)について >(2)ピボットの範囲はドコに記入されているのですか?? ピボットテーブルを作成する先。という意味ですよね。 答えは...『省略しています』 .CreatePivotTable(TableDestination:="") この TableDestination で指定するのですが、上記のように省略すると ピボットウィザード3/3で[新規ワークシート]にピボットを作成するのと同じ事になります。 指定することも可能です。 Sub sample2()ではあえて、 ActiveWorkbook.Sheets.Add とシートを事前に追加し、(追加したシートは必ずActiveSheetになるので) TableDestination:=ActiveWorkbook.ActiveSheet.Range("E5") と指定してみました。 また、お使いのバージョンはxl2000だと思いますが、 xl2002以降だと、ピボットの元データ範囲の指定は SourceData:=r や SourceData:=Range("G1", .Range("A1").End(xlDown)) というように、セル範囲を表すObjectで指定できます。 xl2000だと r.Address(external:=True)というセル範囲を表すアドレス『文字列』で指定しないといけません。 これに対して作成先は TableDestination:=Range("E5") などとセル範囲での指定です。 ■もう一点。 一般機能の[名前の定義]を使ってピボット元データの範囲を可変にする事もできます。 Sheets("A")で[Ctrl]+[F3]キーで[名前の定義]ウィンドウが開きます。 [名前]欄に   database (例えば) [参照範囲]欄に =OFFSET($A$1,0,0,COUNTA($A:$A),7) [OK] として、手作業でピボットを作成します。 ピボットウィザードの元データの参照範囲に database とすると、毎回ピボットを作成するのではなくて 一度作ったピボットの[データの更新]をするだけで良いです。 ■蛇足として【VBAの理解を深めるには】 1)意味がわからない語句などは、その語にキャレット(マウスカーソル)をあてて[F1]キー押下で  HELPトピックにアクセスできます。(できない語句もあります) 2)全体を通してコードの動きを確認したい時は、VBEウィンドウを半画面の状態で、  コード内で[F8]キー押下で1ステップずつ、Excel画面の動きも見ながら実行すると効果的です。 3)その時、[ローカルウィンドウ]を表示させておくと、変数の内容も確認できます。 >仕事で忙しい中の独学だと限界があるようです。。。 私も同じような環境でした^ ^ >仕事を楽にするため これが何よりも上達の原動力になると思います。 では。がんばってください^ ^

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.2

こんにちは。 ■(1)(4)について Dim r As Range  で、Object型(Range)の『変数』として r を準備しています。 Set r = .Range("G1", .Range("A1").End(xlDown))  でその r にセル範囲を一旦、代入して、その後SourceData指定で使用します。  通常 SetしたObject型の変数領域は、そのプロシージャが終了すると  自動的にリセットされるとされていますが、 Set r = Nothing  で、明示的にそのObjectを破棄して後始末をしています。 『変数』というのは、容れモノ、というか、別名、というか。そんなようなものです。 実行効率や、可読性、メンテナンス性を良くするためなどに使います。 私の拙い説明より、 "VBA" "変数について" でgoogle検索してみてください。そこから http://oshiete1.goo.ne.jp/kotaeru.php3?q=2148713 http://pc.nikkeibp.co.jp/article/NPC/20070208/261421/ などを参考にされると良いですよ。 ■(3)について 実行効率や可読性を良くするという意味ではWithステートメントも同じです。 あるObjectに対して処理する時、何度も呼び出さず、With ステートメントで一度だけ指定して呼び出し、 効率を上げるためにまとめるわけです。 前述のコードを簡単に階層化させると ┌With ActiveWorkbook ├─この間 .の前は ActiveWorkbook.を指す │┌With .PivotCaches │├─この間 .の前は ActiveWorkbook.PivotCaches.を指す ││┌With .CreatePivotTable ││├─この間 .の前は ActiveWorkbook.PivotCaches.CreatePivotTable.を指す │││┌With .PivotFields("金額") │││├─この間 .の前は ActiveWorkbook.PivotCaches.CreatePivotTable.PivotFields("金額").を指す │││└End With ││└End With │└End With └End With ...な感じです。 前述コードを、むりやりWith ステートメントを使わず書くなら Sub sample2()   ActiveWorkbook.Sheets.Add   ActiveWorkbook.PivotCaches.Add( _       SourceType:=xlDatabase, _       SourceData:="A!" & ActiveWorkbook.Sheets("A").Range( _       "G1", ActiveWorkbook.Sheets("A").Range("A1").End(xlDown)).Address _       ).CreatePivotTable TableDestination:=ActiveWorkbook.ActiveSheet.Range("E5")   ActiveWorkbook.ActiveSheet.PivotTables(1).AddFields RowFields:="要素"   ActiveWorkbook.ActiveSheet.PivotTables(1).PivotFields("金額").Orientation = xlDataField   ActiveWorkbook.ActiveSheet.PivotTables(1).DataFields(1).Caption = "金額計"   ActiveWorkbook.ActiveSheet.PivotTables(1).DataFields(1).Function = xlSum End Sub と書けます。 『変数』『Withステートメント』については 『Excel特有のオブジェクト、メソッド、プロパティの理解』 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_060.html この辺りが参考になるかと^ ^

noname#200584
質問者

お礼

ご返信ありがとうございました。 詳しいご説明で大変分かりやすかったです。 DimとかWithはいろんなところで使えそうですね。 まだまだ勉強中なので、これからココで質問することもあると思いますが、そのときはまたお付き合い頂ければ幸いです。 今回は本当に助かりました。 ありがとうございました。

関連するQ&A

  • マクロでピボットテーブルを作成

    マクロでピボットテーブを作成したいのですが、範囲指定がうまくいきません。 Workbooks.Open Filename:="C:\出庫実績.csv" Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "出庫実績!R1C1:R458C24").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("店舗名称").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="店舗名称" ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("出庫数ケース").Orientation = _ xlDataField 出庫実績csvのデータは日々変わる為、範囲の選択がうまくいかず、ピボットテーブルの合計数が合いません。よろしくお願いします。

  • ピボットテーブルのマクロについて

    ピボットテーブルのマクロについて教えてください。 NO 場所  ランク 面積 1  東京  上    10 2  大阪  上    20 3  福岡  中    20 4  広島  中    30 5  東京  中    15 6  東京  中   25 7  大阪  下   35 8  福岡  下   45 9  大阪  下   10 10 大阪  下   10 という表があり、 場所ごとランクごとの面積集計を ピボットテーブルのマクロを組んで実施したい のですが(同じ作業を繰り返すので)、 マクロを記録して、内容を実行しようとすると、 「実行時エラー」が出てしまいます。 記録したマクロは以下の通りです。 ( → ←のところでエラーが出ます) Sub Macro1()  ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _   "Sheet1!C2:C4").CreatePivotTable TableDestination:="", TableName:= _  "ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10  ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)  ActiveSheet.Cells(3, 1).Select → With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("場所")   ←   .Orientation = xlRowField   .Position = 1  End With With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("ランク")    .Orientation = xlRowField    .Position = 2  End With  ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _    "ピボットテーブル2").PivotFields("面積"), "データの個数 / 面積", xlCount  Range("A3").Select  ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("データの個数 / 面積 ").Function = _  xlSum End Sub ピボットテーブルのフィールドリストがうまく挙がってこないようなのですが、 どのようにマクロを組み直せば、よいのでしょうか? 作りたい集計表は、以下のようなものです。 場所 ランク  合計 広島  中   30  集計     30 大阪  下   55     上    20  集計     75 東京  上   10     中    40  集計     50 福岡  下   45     中    20  集計     65 総計      220 長々とまた見づらくてすみません。 よろしくお願いします。

  • マクロでピボットテーブルを作成したい

    こんばんは。マクロの自動記録を使って、ピボットテーブルを作成したのですが、記録した時のシート名とデータ範囲で記録されてしまいます。アクティブシートのデータがある範囲をピボットテーブルにしたい時は、どうすれば良いでしょうか? 以下のコードが自動記録で作成したコードです。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "シート名!R1C1:R1000C30").CreatePivotTable TableDestination:= _ "", TableName:="ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品番号") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品名 ") .Orientation = xlRowField .Position = 2 End With Range("A9").Select ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品番号").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル2").PivotFields("数量 "), "データの個数 / 数量 ", xlCount With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("発送日 ") .Orientation = xlPageField .Position = 1 End With Range("A1").Select ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("発送日 ").Orientation = _ xlHidden With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("希望時期") .Orientation = xlColumnField .Position = 1 End With

  • EXCEL2000 ピボットテーブルをマクロで作成

    以下の項目があります。 ID,レースID,芝0・ダ1,平地0・障害1,距離,騎手名,調教師名,人気,単勝オッズ,着順,開催 ピボットテーブルで、騎手別の着順数をSheet2のA1に出力しようと、マクロの自動記録で以下を作りましたが、「コピーまたは移動先のセルの内容を置き換えますか」とエラーになります。 データ数は、増えていくので、可変になるようにお願いします。 Sub Macro3() ' ' Macro3 Macro ' マクロ記録日 : 2013/5/6 ユーザー名 : ' Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R3785C11").CreatePivotTable TableDestination:=Range("A1"), _ TableName:="ピボットテーブル1" ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="騎手名", _ ColumnFields:="着順" With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("着順") .Orientation = xlDataField .Caption = "データの個数 : 着順" .Function = xlCount End With End Sub

  • ピボットテーブルをマクロで行なうには

    以下3行目が項目でデータレコードが4~588行目迄入っています。(行数は毎回変わります) これをピボットテーブルで 縦列に"分類" 横行に"月" フィールドに"受注額(合計)" としたく以下マクロ記録しましたが次に実行しようとするとうまくいきません。 参考書読むとActiveSheetとEnd(xlUp)を使うのかなと思えたのですが 具体的にどのようしたら良いのか宜しく御願いします。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'Aシート'!R3C1:R588C12").CreatePivotTable _ TableDestination:="", TableName:="ピボットテーブル1" ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル1") .DisplayNullString = False .RowGrand = False .SmallGrid = False End With ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="分類", _ ColumnFields:="月" With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("受注額(合計)") .Orientation = xlDataField .NumberFormat = "#,##0_ ;[赤]-#,##0 " End With End Sub

  • ピボットテーブルのマクロでシートを指定、連続

    過去問?も確認しましたが、うまく行きません。 マクロの自動記録で作成し、TableDestination:=Sheets("Sheet1").Range("A1"),、と変更しましたが、 With ActiveSheet.PivotTables("ピボットテーブル1")のところで止まってしまいます。また、最後の行の Application.Run "'Pivot for 東京.xls'!Macro3"は、正しい記述でしょうか?  よろしくお願いします。 Workbooks.Open Filename:= _ "C:\Documents and Settings\ \デスクトップ\Access DB\Pivot for 東京.xls" Sheets("DSG").Select Columns("A:AZ").Select Range("Q1").Activate Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("GSG").Select Columns("A:AZ").Select Range("P1").Activate Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("ダート").Select Columns("A:AZ").Select Range("W1").Activate Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("芝").Select Columns("A:AZ").Select Range("AQ1").Activate Selection.Delete Shift:=xlToLeft Range("A1").Select Windows("Pivot01.xls").Activate Sheets("G").Select Range("E1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "G!R1C5:R8594C11").CreatePivotTable TableDestination:=Sheets("Sheet1").Range("A1"), TableName _ :="ピボットテーブル1" With ActiveSheet.PivotTables("ピボットテーブル1")  '------------>ここで止まります .NullString = "0" .SmallGrid = False End With ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="騎手名", _ ColumnFields:=Array("距離", "着順") With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("着順") .Orientation = xlDataField .Caption = "データの個数 : 着順" .Function = xlCount End With Application.CommandBars("PivotTable").Visible = False Windows("Pivot01.xls").Activate Sheets("1").Select Columns("A:DD").Select Selection.Delete Shift:=xlToLeft Sheets("D").Select Range("E1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "D!R1C5:R9508C11").CreatePivotTable TableDestination:=Sheets("Sheet1").Range("A1"), TableName _ :="ピボットテーブル2" ActiveSheet.PivotTables("ピボットテーブル2").SmallGrid = False ActiveSheet.PivotTables("ピボットテーブル2").AddFields RowFields:="騎手名", _ ColumnFields:=Array("距離", "着順") With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("着順") .Orientation = xlDataField .Caption = "データの個数 : 着順" .Function = xlCount End With Application.CommandBars("PivotTable").Visible = False Windows("Pivot01.xls").Activate Sheets("1").Select Columns("A:DD").Select Selection.Delete Shift:=xlToLeft Sheets("GSG").Select Range("E1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "GSG!R1C5:R81C11").CreatePivotTable TableDestination:=Sheets("Sheet1").Range("A1"), TableName _ :="ピボットテーブル3" With ActiveSheet.PivotTables("ピボットテーブル3") .NullString = "0" .SmallGrid = False End With ActiveSheet.PivotTables("ピボットテーブル3").AddFields RowFields:="騎手名", _ ColumnFields:="着順" With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("着順") .Orientation = xlDataField .Caption = "データの個数 : 着順" .Function = xlCount End With Application.CommandBars("PivotTable").Visible = False Windows("Pivot01.xls").Activate Application.Run "'Pivot for 東京.xls'!Macro3" End Sub

  • マクロ登録したピボットが重いのです

    以前、http://oshiete1.goo.ne.jp/qa3362330.html を質問させていただいた者です。 同じくエクセル2003で、ピボットを作りました。VBAで、 Selection.End(xlDown).Select N = Selection.Row を登録し、下記のプログラムを作ったところ、★の部分で再計算が始まり、終了まで非常に時間がかかってしまいます(1分程)。マクロは作動しますので、時間がかからないようにする方法はあるでしょうか。よろしくお願いします。 Sheets("data").Select Range("D1").Select ActiveCell.FormulaR1C1 = "担当" Selection.End(xlDown).Select N = Selection.Row ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],number!C[-3]:C[-2],2,0)" Selection.AutoFill Destination:=Range("D2:D" & N) Range("D2:D" & N).Select Selection.Copy ★ Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Sheets("answer").Select Range("A1").Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "data!R1C1:R" & N & "C4").CreatePivotTable TableDestination:="[集計(1).xls]answer!R1C1", _ TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("性別") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("商品番号") .Orientation = xlColumnField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル1").PivotFields("価格"), "合計 / 価格", xlSum Columns("A:A").ColumnWidth = 30 Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A1").Select End Sub

  • マクロでピボットテーブルを行う方法

    マクロ初心者です。よろしくお願い致します。 マクロでピボットテーブルにて集計を行いたいと思っています。 コマンドボタン1発で以下の全ての動作を行いたいです。 ■動作詳細■ [OK]コマンドボタンで指定したファイルを開く。 [OK]集計しやすいようにファイル内のデータを加工。 [NG]指定して開いたファイル上でピボットテーブル集計ができない。 ■NG要因として■ 指定して開いたファイルのSheet1上のデータをピボットテーブル新規作成でSheet2に作成するので、集計する元のデータの場所(Sheet1)をマクロ上に記載する必要があると思うのですが、うまくいきませんでした。 どなたかお分かりになる方がいらっしゃいましたらご助言いただければと思います。よろしくお願いします。 ■作成マクロ■ ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "test01!C1:C8").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("コード") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("色") .Orientation = xlColumnField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル2").PivotFields("売上"), "データの個数 / 売上数量", xlCount 一度、作成したピボットテーブルのデータをマクロにコピーしてコマンドボタンにペーストしました。 それによって参照してあるセルの位置もズレてしまったのでしょうか? どこを直せばよいのか分からなくなってしまいました。 よろしくお願いいたします。

  • マクロを利用してピポットテーブルを作成する方法を教えてください

    マクロを利用してピポットテーブルを作成する方法を教えてください。 仕事を効率化するために必要となりますが、マクロの知識がないため教えていただけないでしょうか。よろしくお願いします。 ピポットのデータとなりますエクセルの表は日付、金額、摘要の3列で行がその都度異なります。 日付    金額    摘要  月 日  ××円   ××  月 日  ××円   ×× 自動記録を利用し、作成しましたものは下記の通りです。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "科目!R1C1:R30C3").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル1" ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="摘要", _ ColumnFields:="日付" ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("金額").Orientation = _ xlDataField Application.CommandBars("PivotTable").Visible = False Range("B4").Select Selection.Group Start:=True, End:=True, Periods:=Array(False, False, False, _ False, True, False, True) End Sub どこをどのように変更すればよろしいでしょうか。

  • ご質問です。素人です。お願いします。

    ピボットテーブルを作ったマクロで、新規ワークシートに作成する文はどこですかね?教えて下さい。 Sub 担当者名別売上() ' ' 担当者名別売上 Macro ' マクロ記録日 : 2008/2/25 ユーザー名 : aaaaaa ' ' 集計 = MsgBox("担当者別に売上の降順にしますか?", vbYesNo) If 集計 = vbYes Then ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "売上データ!R1C1:R255C6").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("担当者名") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル2").PivotFields("売上額"), "合計 / 売上額", xlSum Range("B5").Select Selection.Sort Key1:="R5C2", Order1:=xlDescending, Type:=xlSortValues, _ OrderCustom:=1, Orientation:=xlTopToBottom, SortMethod:=xlPinYin Range("B5").Select Sheets("売上データ").Select Range("A1").Select End If End Sub

専門家に質問してみよう