- ベストアンサー
ピポットをマクロ登録したのですが
ピポットをマクロに自動登録しました。ところが作動するとデバックが起きてしまいます。VBAに特別なプログラムを付け加える必要があるのでしょうか? 初心者なので勉強不足のところが多いのですが、どうかよろしくお願いします。 なお、シートは3枚で「data」「number」「answer」があり、「data」には価格の情報がないので、「number」シートからvlookupで情報を拾ってきています。ピポットは「answer」シートに作り、値の貼り付けをしてセルA1の列幅を20にしています。 Range("D1").Select ActiveCell.FormulaR1C1 = "担当" ActiveCell.Characters(1, 2).PhoneticCharacters = "タントウ" Range("D2").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C1:R92C1,number!R2C1:R109C2,2,0)" Selection.AutoFill Destination:=Range("D2:D92"), Type:=xlFillDefault Range("D2:D92").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A2").Select Application.CutCopyMode = False ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "data!R1C1:R92C4").CreatePivotTable TableDestination:="[集計(1).xls]answer!R1C1" _ , TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 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 = 1 End With ActiveSheet.PivotTables("ピボットテーブル1").PivotSelect "商品番号[All]", xlLabelOnly, _ True Range("B2").Select ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("商品番号").Orientation = _ xlHidden ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル1").PivotFields("価格"), "合計 / 価格", xlSum Columns("A:A").Select Selection.ColumnWidth = 20 Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub
- murasakish
- お礼率75% (3/4)
- オフィス系ソフト
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 作った集計表を数値化していますが、 TableName:="ピボットテーブル1" のピボットテーブルが存在するとか、TableDestination:="[集計(1).xls]answer!R1C1"のブック名が異なっているとか、確認してみてください。 省略できる引数もあるので、ヘルプファイルを活用して、分からないコードは調べるクセをつけるといいですよ。 作成先のシートを指定している場合は、 一旦、シートのセルをクリアしてから作成するのが常套手段だと思います。 また、複数のピボットテーブルを操作するのでなければ、 名前を省略して、INDEXで指定してあげると処理がすっきりします。 また、ピボットテーブルの作成は、手作業での手順が把握できたら、 ウィザード3/3のレイアウトで組むようにするといいです。 ワークシートで組むのと違ってすっきりしたコードが書けます。 記録したコードの編集ですが、 ほとんど場合、□.Select、Selection.△と続く処理は、□.△というようにつないで書くことができます。画面のちらつきもなくなりますし、 処理が早くなります。ぜひコードの編集にチャレンジしてください。 下に、サンプルを掲示しますので、F8でステップ実行しながら、 murasakishさんの処理の参考にしてみてください。 Sub 例えば() With Worksheets("data") .Range("D1").Value = "担当" With .Range("D2") .FormulaR1C1 = "=VLOOKUP(R2C1,number!R2C1:R109C2,2,0)" .AutoFill Destination:=.Parent.Range("D2:D92"), Type:=xlFillDefault End With With .Range("D2:D92") .Copy .PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False End With Application.Goto Reference:=.Range("A2") End With Worksheets("answer").Cells.Clear ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _ SourceData:=Worksheets("data").Range("A1").CurrentRegion.Address(External:=True)) _ .CreatePivotTable TableDestination:=Worksheets("answer").Range("A1") With Worksheets("answer") .Activate With .PivotTables(1) .PivotFields("商品番号").Subtotals(1) = False .AddFields RowFields:=Array("商品番号", "担当"), ColumnFields:="性別" .PivotFields("価格").Orientation = xlDataField With .TableRange1 .Copy .PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False .Interior.ColorIndex = xlNone Application.Goto Reference:=.Range("A1") End With End With .Columns("A:A").ColumnWidth = 20 End With End Sub
その他の回答 (2)
- KenKen_SP
- ベストアンサー率62% (785/1258)
エラーの内容(エラー番号、メッセージ)とか、状況(例えば1回目は 上手くいくのに2回目は失敗するとか)の説明がないと回答側にはエラー の原因がつかめません。 なぜなら、コードには問題がなく、シート上のデータ側に問題があるなど コード上では読み取れない原因があるのかもしれないからです。 そのため、少なくともこのような情報の提供が必要なのです。 で、気になる点を。 > [集計(1).xls]answer!R1C1 という表記はおかしくないですか?単に answer!R1C1 にしてみたら?
お礼
自動記録で作ったので可笑しいところには気がつきませんでした。これでも実行されましたので、ここが原因ではなかったようですが…。今後のこともありますので覚えるようにします。ありがとうございました。
- KenKen_SP
- ベストアンサー率62% (785/1258)
> ところが作動するとデバックが起きてしまいます。 どの行でエラーになるのかを書かないと。。それから、どのような状況で エラーになるのかの説明、Excel や OS のバージョン等も書かないと。。 試してないけど、とりあえず気づいた部分です。 ■ [追加] 1行目にシートのアクティブ化コード Range("D1").Select ActiveCell.FormulaR1C1 = "担当" ↓ Worksheets("data").Activate Range("D1").Select ActiveCell.FormulaR1C1 = "担当" ■ [修正]VLOOKUP 関数の第一引数がヘン ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C1:R92C1,number!R2C1:R109C2,2,0)" ↓ ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C1,number!R2C1:R109C2,2,0)" ■ [追加] シートのアクティブ化コード With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("性別") ↓ Worksheets("answer").Activate With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("性別")
補足
Excel2003です。失礼しました。VBA用に書き直しました。デバックが起きるのは※の部分です。 Dim L As Integer Worksheets("data").Activate Range("D1").Select ActiveCell.FormulaR1C1 = "担当" Range("D2").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C1,number!R2C1:R109C2,2,0)" Selection.AutoFill Destination:=Range("D2:D92"), Type:=xlFillDefault Range("D2:D92").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A2").Select Sheets("answer").Select Range("A1").Select Worksheets("answer").Activate ※ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "data!R1C1:R92C4").CreatePivotTable TableDestination:="[集計(1).xls]answer!R1C1" _ , TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("性別") Worksheets("answer").Activate .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 = 1 End With ActiveSheet.PivotTables("ピボットテーブル1").PivotSelect "商品番号[All]", xlLabelOnly, _ True Range("B2").Select ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("商品番号").Orientation = _ xlHidden ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル1").PivotFields("価格"), "合計 / 価格", xlSum Columns("A:D").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A21").Select End Sub よろしくお願いします。
関連するQ&A
- マクロ登録したピボットが重いのです
以前、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
- ベストアンサー
- オフィス系ソフト
- マクロ実行時にエラーが出てしまいます
マクロを記録し、それを実行しようとしたのですが、途中で下記のようなエラーが出てしまいます。 実行時エラー '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
- 締切済み
- その他MS Office製品
- マクロ実行時にエラーが出てしまいます
マクロを記録し、それを実行しようとしたのですが、途中で下記のようなエラーが出てしまいます。 実行時エラー '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
- 締切済み
- その他MS Office製品
- マクロでピボットテーブルを作成したい
こんばんは。マクロの自動記録を使って、ピボットテーブルを作成したのですが、記録した時のシート名とデータ範囲で記録されてしまいます。アクティブシートのデータがある範囲をピボットテーブルにしたい時は、どうすれば良いでしょうか? 以下のコードが自動記録で作成したコードです。 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のデータは日々変わる為、範囲の選択がうまくいかず、ピボットテーブルの合計数が合いません。よろしくお願いします。
- 締切済み
- Visual Basic
- ピボットテーブルのマクロでシートを指定、連続
過去問?も確認しましたが、うまく行きません。 マクロの自動記録で作成し、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
- ベストアンサー
- その他MS Office製品
- Excel VBA:
A1~AB11542 (先頭はタイトル行) の表をマクロでピボットテーブルを作りたいです。データを追加して範囲が変わっても、ピボットテーブルの範囲が変わってくれません。下記のマクロの意味が分からないのですが、どう修正すればいいのでしょうか。お願いします。 Range("A1").Select Selection.CurrentRegion.Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'200804~累計'!R1C1:R10501C28").CreatePivotTable TableDestination:="", _ TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveWorkbook.ShowPivotTableFieldList = True 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 ActiveSheet.Name = "月別集計" ActiveWorkbook.ShowPivotTableFieldList = False
- ベストアンサー
- オフィス系ソフト
- ピボットテーブルの範囲を可変にしたい
ピボットテーブルのマクロを作っています。 「発注データ」というシートの隣に新しいシートを追加し そこにピボットテーブルを作成するという内容です。 シート名の「発注データ~」と参照範囲「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
- ベストアンサー
- Excel(エクセル)
- Excelマクロでピポットテーブルを作りたい
マクロを使ってピポットテーブルを作ろうとしていますが、エラーメッセージがあちこちに出てしまい何が悪いのかわかりません。どうかご助言の程、何卒よろしくお願い申し上げます。 Sub 名別_M() ' ' 名別_M Macro ' Range("A2").Select With Worksheets.Add() '新しいシートを作成し、名前を「名別」にする処理 .Name = "名別" Dim NewSheetName As String NewSheetName = InputBox("新しいシート名を入力ください") ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ NewSheetName!R1C1:R95C18,Version:=xlPivotTableVersion15). CreatePivotTable TableDestination:="名別!R3C1", TableName:="ピボットテーブル1" _ , DefaultVersion:=xlPivotTableVersion15 End With '「名別」にした最後の処理 Sheets("名別").Select Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("UserName") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル1").PivotFields("作業時間"), "合計 / 作業時間", xlSum Range("A3").Select ActiveSheet.PivotTables("ピボットテーブル1").CompactLayoutRowHeader = "UerName" Rows("1:2").Select Selection.Delete Shift:=xlUp Range("E26").Select End Sub
- ベストアンサー
- Excel(エクセル)
- エクセルのマクロ
一定期間内の数量と価格をチェックするために エクセルでマクロを組みましたが下記のエラーが出てしまいます。 実行時エラー ’1004’ Worksheet クラスのPivot tablesプロパティを取得できません ソースは ' ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "データ!R1C1:R1000C19").CreatePivotTable TableDestination:= _ "[価格.xls]ワーク1!R1:R65536", TableName:="ピボットテーブル1", DefaultVersion:= _ xlPivotTableVersion10 ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:=Array("商品CD", _ "データ") With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("数量") .Orientation = xlDataField .Caption = "合計 / 数量" .Position = 1 .Function = xlSum End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("単価") .Orientation = xlDataField .Caption = "最大値 / 単価" .Function = xlMax End With Range("B1").Select With ActiveSheet.PivotTables("ピボットテーブル1").DataPivotField .Orientation = xlColumnField .Position = 1 End With End Sub です。 ストップしているのは↓の部分と思われます。 ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:=Array("商品CD", _ "データ") どうすればエラーが回避できるでしょうか。 ご教授お願いします。
- 締切済み
- Visual Basic
お礼
ご丁寧にありがとうございます。参考にさせていただいたら動くようになりました。F8でのステップ実行、これから習慣にします。