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

このQ&Aのポイント
  • ピボットテーブルを作成するマクロを使用して、指定したシートで連続的に処理を行いたいです。しかし、いくつかの問題が発生しています。
  • まず、マクロの自動記録機能を使用してピボットテーブルを作成しましたが、指定したシートに表が表示されず、データを取得できませんでした。
  • さらに、別のExcelファイルに保存されているマクロを実行しようとしていますが、正しい記述方法がわかりません。
回答を見る
  • ベストアンサー

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

過去問?も確認しましたが、うまく行きません。 マクロの自動記録で作成し、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

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

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

単純に4つつなげて、かつ新規シートにピボットを作成するだけなら以下。 Sub try02()   Dim pt As PivotTable 'ピボットテーブル用変数を準備   Dim rng As Range   'データ範囲用変数を準備   Application.ScreenUpdating = False   'マクロがあるBookなら『 With ThisWorkbook 』 でも可   With ThisWorkbook 'Workbooks("Pivot01.xls")     '----------------------------------------------------------     'Gシートの E列最終行から K1セルまでの矩形範囲がデータ範囲?     With .Sheets("G")       Set rng = .Range("K1", .Cells(.Rows.Count, "E").End(xlUp))     End With     'ピボットテーブルを作成して変数に格納     Set pt = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rng) _                  .CreatePivotTable _                  (TableDestination:=.Worksheets.Add.Range("A1"))     '以下、変数ptを利用してピボットを操作     pt.NullString = "0"     pt.AddFields RowFields:="騎手名", _            ColumnFields:=Array("距離", "着順")     With pt.PivotFields("着順")       .Orientation = xlDataField       .Function = xlCount     End With     '----------------------------------------------------------     With .Sheets("D")       Set rng = .Range("K1", .Cells(.Rows.Count, "E").End(xlUp))     End With     Set pt = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rng) _                  .CreatePivotTable _                  (TableDestination:=.Worksheets.Add.Range("A1"))     pt.NullString = "0"     pt.AddFields RowFields:="騎手名", _            ColumnFields:=Array("距離", "着順")     With pt.PivotFields("着順")       .Orientation = xlDataField       .Function = xlCount     End With     '----------------------------------------------------------     With .Sheets("GSG")       Set rng = .Range("K1", .Cells(.Rows.Count, "E").End(xlUp))     End With     Set pt = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rng) _                  .CreatePivotTable _                  (TableDestination:=.Worksheets.Add.Range("A1"))     pt.NullString = "0"     pt.AddFields RowFields:="騎手名", _            ColumnFields:="着順"     With pt.PivotFields("着順")       .Orientation = xlDataField       .Function = xlCount     End With     '----------------------------------------------------------     With .Sheets("DSG")       Set rng = .Range("K1", .Cells(.Rows.Count, "E").End(xlUp))     End With     Set pt = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rng) _                  .CreatePivotTable _                  (TableDestination:=.Worksheets.Add.Range("A1"))     pt.NullString = "0"     pt.AddFields RowFields:="騎手名", _            ColumnFields:="着順"     With pt.PivotFields("着順")       .Orientation = xlDataField       .Function = xlCount     End With   End With End Sub 出来上がりの形がわからないので参考ですが サブプロシージャを使ってまとめると以下のような感じです。 Sheet1にまとめて作成します。 Sub try03()   Dim pt As PivotTable   Dim rng As Range   Application.ScreenUpdating = False   With ThisWorkbook 'Workbooks("Pivot01.xls")     .Sheets("Sheet1").UsedRange.Clear     With .Sheets("G")       Set rng = .Range("K1", .Cells(.Rows.Count, "E").End(xlUp))     End With     Call SubPivot(rng, Array("騎手名"), Array("距離", "着順"), "着順")     With .Sheets("D")       Set rng = .Range("K1", .Cells(.Rows.Count, "E").End(xlUp))     End With     Call SubPivot(rng, Array("騎手名"), Array("距離", "着順"), "着順")     With .Sheets("GSG")       Set rng = .Range("K1", .Cells(.Rows.Count, "E").End(xlUp))     End With     Call SubPivot(rng, Array("騎手名"), Array("着順"), "着順")     With .Sheets("DSG")       Set rng = .Range("K1", .Cells(.Rows.Count, "E").End(xlUp))     End With     Call SubPivot(rng, Array("騎手名"), Array("着順"), "着順")   End With End Sub Sub SubPivot(rng As Range, r, c, f As String)   Dim dest As Range   With ThisWorkbook     With .Sheets("Sheet1")       Set dest = .Cells(.Rows.Count, 1).End(xlUp).Offset(2)     End With     With .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rng) _         .CreatePivotTable(TableDestination:=dest)       .NullString = "0"       .AddFields RowFields:=r, _             ColumnFields:=c       With .PivotFields(f)         .Orientation = xlDataField         .Function = xlCount       End With     End With   End With End Sub

7skies
質問者

お礼

何度もありがとうございました。 マクロの理解は追いつきませんでしたが、作動は完璧です。 少しずつ勉強していきます。

その他の回答 (3)

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

>以下が黄色くなって「プロパティを取得できません」となります。 だから、 『この時のActiveSheetが何か考えてみましょう。』って書いてるでしょ。 同じ事です。 冒頭の"Pivot for 東京.xls"の列削除は別として、 >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 以上の箇所を整理すると Sub try01()   Dim pt As PivotTable 'ピボットテーブル用変数を準備   Dim rng As Range   'データ範囲用変数を準備   'マクロがあるBookなら『 With ThisWorkbook 』 でも可   With Workbooks("Pivot01.xls")     'Gシートの E列最終行から K1セルまでの矩形範囲がデータ範囲?     With .Sheets("G")       Set rng = .Range("K1", .Cells(.Rows.Count, "E").End(xlUp))     End With     'ピボットテーブルを作成して変数に格納     Set pt = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rng) _                  .CreatePivotTable _                  (TableDestination:=.Sheets("Sheet1").Range("A1"))     '以下、変数ptを利用してピボットを操作     pt.NullString = "0"     pt.SmallGrid = False     pt.AddFields RowFields:="騎手名", _            ColumnFields:=Array("距離", "着順")     With pt.PivotFields("着順")       .Orientation = xlDataField       .Caption = "データの個数 : 着順"       .Function = xlCount     End With   End With   Application.CommandBars("PivotTable").Visible = False End Sub ..こんな感じになります。 『応用』してくださいね。 それと提示コードでは3つのピボットテーブルを Sheets("Sheet1").Range("A1")に作成するようになってますけど 既存のピボットテーブルがある位置に上書き作成はできないですから。 連続実行するわけではないと思いますが、そこも『応用』してください。

7skies
質問者

お礼

御回答ありがとうございます。 1度は、作動するのですが、連続で使用すると以下で止まります。 ptとrngをpt2とrng2 のように変更したり、教えていただいたサイトを見て勉強したのですが分かりませんでした。  Set pt = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rng) _                  .CreatePivotTable _                  (TableDestination:=.Sheets("Sheet1").Range("A1")) SheetGとSheetDとSheetGSGとSheetDSGの4つのシートのデータをピボットテーブルで処理したいのです。 SheetGのデータをピボットテーブルでSheet1に処理し、別のファイルに貼り付け、 Sheet1を Cells.Select Selection.Clear と削除して SheetDのデータをピボットテーブルでSheet1に処理し、別のファイルに貼り付け.....としようとしたのですが、いろいろと試行錯誤したのですが、分かりませんでした。再度御教示いただけないでしょうか、よろしくお願い致します。

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

>With ActiveSheet.PivotTables("ピボットテーブル1") '------------>ここで止まります なのでエラーメッセージは 『実行時エラー '1004': Worksheet クラスの PivotTables プロパティを取得できません。』 なのでしょう。 この時のActiveSheetが何か考えてみましょう。 7行前に >Sheets("G").Select していますからSheets("G")がActiveになっています。 >..TableDestination:=Sheets("Sheet1").Range("A1"),.. PivotTables("ピボットテーブル1")があるのは指定したSheets("Sheet1")であって Sheets("G")ではないですからエラーになります。 With Sheets("Sheet1").PivotTables(1) ..のように指定してあげれば良いでしょう。 マクロ記録ではSelectやActiveSheetをベースにしたコードになりますから 実際にはSelectやActivateに頼らない記述を意識して修正したほうが良いです。 (参考サイトです) http://pvttbl.blog23.fc2.com/ http://pvttbl.blog23.fc2.com/blog-category-3.html >..また、最後の行の >Application.Run "'Pivot for 東京.xls'!Macro3"は、正しい記述でしょうか? Application.Runメソッドで 「Pivot for 東京.xls」ブックに書かれた「Macro3」マクロを実行します。 マクロ記録時に他のマクロを実行すればそれも記録されます。 必要なければ削除して構いません。

7skies
質問者

お礼

御回答ありがとうございます。 'With ActiveSheet.PivotTables("ピボットテーブル1") '------------>ここで止まります を With Sheets("Sheet1").PivotTables(1) に変えたところ、次の3行は進むのですが、 .NullString = "0" .SmallGrid = False End With 以下が黄色くなって「プロパティを取得できません」となります。 ("ピボットテーブル1")をPivotTables(1)に変えても同じところで止まります。 引き続き教えていただけないでしょうか。 ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="騎手名", _ ColumnFields:=Array("距離", "着順")

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

えーと。 そこで止まるのはわかりました。 その際、「どんなエラーメッセージが」出てきますか? それがわからないと対処法も特定できません。 (まぁ、ピボットテーブル作成時点でのエラーですからある程度の予測はできますが。) エラーメッセージは 「インデックスが有効範囲にありません」 ではないでしょうか。 という前提で話を進めます。 コレは主に「指定されたワークシートがありません」な時に発生するエラーです。 なので、今回は(おそらく) > TableDestination:=Sheets("Sheet1").Range("A1") でピボットテーブル作成先に指定している「Sheet1」が存在しないもの、と思われます。 対処としては「作成先シートを“存在するシート名”に変えてやる」 あるいは「前段で"Sheet1"シートを作ってやる」のどちらかです。 > Application.Run "'Pivot for 東京.xls'!Macro3"は、正しい記述でしょうか? キチンと動けば、正しいコードです。 そのブックが開いている状態なら、おそらく動きます。 その他、現状のコードに見ても(おそらく)マクロの記録そのままでしょう。 だとすると、動かないほうがおかしい、とも言えます。 「記録」を見やすく汎用的に書き直す方法は色々ありますが、 本件とは直接のかかわりがありませんから、細かい添削は遠慮しておきます。 別途、研究なさって下さいませ。

関連するQ&A

  • 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

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

    現在、仕事の関係でエクセルを多用しており、 仕事を楽にするためマクロを勉強しています。 インターネットを駆使して、下記のコードを作ってみたのですが、 【】の範囲で「参照が正しくありません」とエラーが出てしまいます。 どこがおかしいかご教授いただけますでしょうか? 自動記録でベースを作った後、範囲の指定を 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 よろしくお願いいたします。

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

    以前、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

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

    こんばんは。マクロの自動記録を使って、ピボットテーブルを作成したのですが、記録した時のシート名とデータ範囲で記録されてしまいます。アクティブシートのデータがある範囲をピボットテーブルにしたい時は、どうすれば良いでしょうか? 以下のコードが自動記録で作成したコードです。 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

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

    マクロでピボットテーブを作成したいのですが、範囲指定がうまくいきません。 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のデータは日々変わる為、範囲の選択がうまくいかず、ピボットテーブルの合計数が合いません。よろしくお願いします。

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

    以下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

  • マクロ実行時にエラーが出てしまいます

    マクロを記録し、それを実行しようとしたのですが、途中で下記のようなエラーが出てしまいます。 実行時エラー '1004': PivotTableクラスのPivotFieldsプロパティを取得できません。 黄色い矢印がとまっているのは下記の箇所です。 →With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("送付先")← 自分なりに調べてみたのですが、選択範囲("E2:E1288"等の箇所)が違うデータでマクロを実行するとエラーになるのだと思っているのですが、選択範囲が毎回変わるのに対応できるコードの変更の仕方が分かりません。 もしよろしければ、アドバイスを頂けませんでしょうか。 コードの全体は下記になります。 Sheets("本体").Select Range("E1").Select ActiveCell.FormulaR1C1 = "品目分け" Range("E2").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-2],1)" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E1288") Range("E2:E1288").Select Sheets("計算結果").Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,SourceData:= _ "本体!C1:C5").CreatePivotTable TableDestination:="[計算用.xls]計算結果!R3C1", _ TableName:="ピボットテーブル", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTables("ピボットテーブル").ColumnGrand = False With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("送付先") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("品目分け") .Orientation = xlColumnField .Position = 1 End With Range("E4").Select ActiveSheet.PivotTables("ピボットテーブル").AddDataField ActiveSheet.PivotTables( _"ピボットテーブル").PivotFields("数量"), "データの個数 / 数量", xlCount ActiveSheet.PivotTables("ピボットテーブル").PivotFields("データの個数/ 数量").Function = _xlSum With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("品目分け") .PivotItems("(空白)").Visible = False End With Range("A1").Select End Sub

  • マクロ実行時にエラーが出てしまいます

    マクロを記録し、それを実行しようとしたのですが、途中で下記のようなエラーが出てしまいます。 実行時エラー '1004': PivotTableクラスのPivotFieldsプロパティを取得できません。 黄色い矢印がとまっているのは下記の箇所です。 →With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("送付先")← 自分なりに調べてみたのですが、選択範囲("E2:E1288"等の箇所)が違うデータでマクロを実行するとエラーになるのだと思っているのですが、選択範囲が毎回変わるのに対応できるコードの変更の仕方が分かりません。 もしよろしければ、アドバイスを頂けませんでしょうか。 コードの全体は下記になります。 Sheets("本体").Select Range("E1").Select ActiveCell.FormulaR1C1 = "品目分け" Range("E2").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-2],1)" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E1288") Range("E2:E1288").Select Sheets("計算結果").Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,SourceData:= _ "本体!C1:C5").CreatePivotTable TableDestination:="[計算用.xls]計算結果!R3C1", _ TableName:="ピボットテーブル", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTables("ピボットテーブル").ColumnGrand = False With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("送付先") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("品目分け") .Orientation = xlColumnField .Position = 1 End With Range("E4").Select ActiveSheet.PivotTables("ピボットテーブル").AddDataField ActiveSheet.PivotTables( _"ピボットテーブル").PivotFields("数量"), "データの個数 / 数量", xlCount ActiveSheet.PivotTables("ピボットテーブル").PivotFields("データの個数/ 数量").Function = _xlSum With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("品目分け") .PivotItems("(空白)").Visible = False End With Range("A1").Select End Sub

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

    ピボットテーブルのマクロについて教えてください。 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 長々とまた見づらくてすみません。 よろしくお願いします。

  • ピボットテーブルの範囲を可変にしたい

    ピボットテーブルのマクロを作っています。 「発注データ」というシートの隣に新しいシートを追加し そこにピボットテーブルを作成するという内容です。 シート名の「発注データ~」と参照範囲「R1C1:R477C8」の部分が毎回変わるため (列は固定で行数が増減)それに対応した記述にしたいのですが どのように変えたらいいのでしょうか? アドバイスよろしくお願いします。 以下マクロ記録で作成してみました。 Sub pivot() ' pivot Macro Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "発注データ20170202!R1C1:R477C8", Version:=xlPivotTableVersion15). _ CreatePivotTable TableDestination:="Sheet1!R3C1", TableName:="ピボットテーブル1" _ , DefaultVersion:=xlPivotTableVersion15 Sheets("Sheet1").Select Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("課") .Orientation = xlColumnField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品番") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("製品コード") .Orientation = xlRowField .Position = 2 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("製品名1") .Orientation = xlRowField .Position = 3 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("製品名2") .Orientation = xlRowField .Position = 4 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("棚番号") .Orientation = xlRowField .Position = 5 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("単価") .Orientation = xlRowField .Position = 6 End With ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル1").PivotFields("数量"), "合計 / 数量", xlSum ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品番").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("製品コード").Subtotals = Array _ (False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("製品名1").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("製品名2").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("箱番").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("単価").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("数量").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("課").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル1").RowAxisLayout xlTabularRow End Sub

専門家に質問してみよう