• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ピボットテーブル完成後の最終行の取得をVBAで)

エクセルVBAでピボットテーブル完成後の最終行を取得する方法

このQ&Aのポイント
  • エクセルVBAを使用してピボットテーブルを作成しましたが、ピボットテーブル完成後の最終行の取得方法にエラーが発生しています。
  • エラーが発生している部分は、最終行を取得するためのコード「最終行 = .Cells(.Rows.Count, 1).End(xlUp).Row」です。
  • エラーの内容は、「実行時エラー438:オブジェクトは、このプロパディまたはメソッドをサポートしていません」というものです。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

間違ったWithの下にぶら下がってしまっているので,次のように修正します。 最終行 = activesheet.Cells(activesheet.Rows.Count, 1).End(xlUp).Row #いずれの修正箇所も,必要なのはピボットテーブルを置いた現在のシート全体から見たセルの情報であって,今のマクロでWithしているピボットテーブルのものではありません。 また,全体に「ActiveSheet」を使わずにピボットテーブルレポートを作成したシートをきちんと取得して操作するマクロにステップアップするよう,勉強してみて下さい。

gx9wx
質問者

お礼

教えていただいた >最終行 = activesheet.Cells(activesheet.Rows.Count, 1).End(xlUp).Row で最終行の取得が出来ました。 >全体に「ActiveSheet」を使わずにピボットテーブルレポートを >作成したシートをきちんと取得して操作するマクロにステップアップ With ActiveSheet.PivotTables("ピボットテーブル1") 以降ですが マクロの記録では With ~ End With が何行も出来たので1つに纏めたのですが。 ピボットテーブルは作成すると その時の状況によって Sheet1になったりSheet2になったり Sheet9などの場合も有ります。 シート名をどうやって取得していいのか よくわかりません。 どうもありがとうございました。

gx9wx
質問者

補足

以下の●の部分を変更したら 元の構文 最終行 = .Cells(.Rows.Count, 1).End(xlUp).Row で動きました。 (先頭からここまで省略) With ActiveSheet.PivotTables("ピボットテーブル1") .PivotFields("順番").Orientation = xlRowField .PivotFields("オーダーNo").Orientation = xlRowField .PivotFields("親品名").Orientation = xlRowField .PivotFields("開始日").Orientation = xlRowField .PivotFields("オーダー数").Orientation = xlRowField .PivotFields("親品番").Orientation = xlRowField .PivotFields("順番").Subtotals(1) = False .PivotFields("オーダーNo").Subtotals(1) = False .PivotFields("親品名").Subtotals(1) = False .PivotFields("開始日").Subtotals(1) = False .PivotFields("オーダー数").Subtotals(1) = False .PivotFields("親品番").Subtotals(1) = False .ColumnGrand = False .RowGrand = True 'ピボットテーブルにて挿入されたシート名を変数に代入 シート名 = ActiveSheet.Name End With’←●ピボットテーブルが完成したここでWithを終わる With Sheets(シート名)’←●追加 最終行 = .Cells(.Rows.Count, 1).End(xlUp).Row’●元の構文 Range(Range("B5"), Cells(最終行, 5)).Copy Sheets("対象").Range("B4").PasteSpecial Paste:=xlPasteValues Range(Range("F5"), Cells(最終行, 6)).Copy Sheets("対象").Range("A4").PasteSpecial Paste:=xlPasteValues Sheets("対象").Range("D1").Value = Left(着手日, 10) Sheets("対象").Select Range("A1").Select End With 'ピボットテーブルのあるシートを削除 Application.DisplayAlerts = False Sheets(シート名).Delete Application.DisplayAlerts = True Application.CutCopyMode = False Sheets("手順").Select

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

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

    ピボットテーブルのマクロを作っています。 「発注データ」というシートの隣に新しいシートを追加し そこにピボットテーブルを作成するという内容です。 シート名の「発注データ~」と参照範囲「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

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

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

  • EXCELマクロのピボットテーブル

    G列に名前、0列に点数があります。 ピボットテーブルで 名前, 平均/点数, 個数/点数 と横に表記したいのですが、 名前, 平均/点数,      個数/点数 と2行分かれて表記されます。 マクロは以下です。どこをどう変更したらよいでしょうか。 'ピボットテーブル作成 Dim pvt As PivotTable Dim rngData As Range Set rngData = ActiveSheet.Range("A1").CurrentRegion Sheets.Add Set pvt = _ ActiveWorkbook.PivotCaches.Add( _ SourceType:=xlDatabase, _ SourceData:=rngData). _ CreatePivotTable(TableDestination:=Range("A3")) With pvt .PivotFields("名前").Orientation = xlRowField .PivotFields("点数").Orientation = xlDataField pvt.DataFields(1).Function = xlAverage With pvt .PivotFields("名前").Orientation = xlRowField .PivotFields("点数").Orientation = xlDataField pvt.DataFields(1).Function = xlCount End With End With '

  • ピボットテーブルをVBAで管理

    ご教授下さい。 ・車両管理をしており、データの集計をとるため、ピボットテーブルを使用しています。 ・データは(日付)(車番)(品番)(品目)(数量)となっていまして、入力する際はフォームで記入しています。 ・品目は10個あり、シート上に品番表を作り、LOOKUP関数で参照しています。 (品番を入力すれば品目が自動転記される形です。) ・品目(品番)は使われない場合もあります。(ここでつまづいてます。) 品目毎にシートを分けて、10個ピボットテーブルを作っていて、 全品目を使用している場合問題はないのですが、 9品目しか使用していない場合でピボットアイテムエラーが出てしまいます。この部分を回避する策はありませんでしょうか? また、テーブルを10個に分けているため、コード自体もかなり長くなっています。もっと簡素化できる方法があれば併せて教えていただければと思います。 コードも載せておきます。(これと同様のものが10回ループしてます。) '軽油 Dim strDataRng1 As String strDataRng = ActiveWorkbook.Worksheets("燃料").Range("A1").CurrentRegion.Address(, , xlR1C1) ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'燃料'!" & strDataRng).CreatePivotTable TableDestination:="", _ TableName:="軽油", DefaultVersion:=xlPivotTableVersion10 With ActiveSheet.PivotTables("軽油").PivotFields("車番") .Orientation = xlColumnField .Position = 1 End With ActiveSheet.PivotTables("軽油").AddDataField ActiveSheet.PivotTables( _ "軽油").PivotFields("数量"), "合計 / 数量", xlSum With ActiveSheet.PivotTables("軽油").PivotFields("日付") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("軽油").PivotFields("品目") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("軽油").PivotFields("品目") .PivotItems("軽油").Visible = True .PivotItems("灯油").Visible = False .PivotItems("ガソリン").Visible = False .PivotItems("ハイオク").Visible = False .PivotItems("オイル").Visible = False .PivotItems("エレメント").Visible = False .PivotItems("クーラント").Visible = False .PivotItems("バッテリー液").Visible = False .PivotItems("洗車").Visible = False .PivotItems("電球").Visible = False End With

  • Excelマクロ ピボットテーブル シート名指定

    お世話になります。 マクロでピボットテーブルを作成しようと思い、一連の動作をマクロ記録しましたところ下記のコードが記録されました。動作は問題ないのですが、ピボットテーブルが作成されるシート名や場所が指定できません。 出来れば、ピボットテーブルを作成するシート名は"ピボット"にして一番右端に配置したいのですが下下記のコードのどこを直せば(または追加)よいのか、どなたかご教授いただけますでしょうか? ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R15C4").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("納品日").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("地区").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル2").AddFields RowFields:=Array("納品日", "地区" _ ), ColumnFields:="商品" ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("出荷数量").Orientation = _ xlDataField ActiveWorkbook.ShowPivotTableFieldList = True よろしくお願い致します。 環境 Windows XP SP3 Excel2003

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

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

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

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

  • Withステートメントの使い方

    プログラムの中で単一のシートやセルなど一つの処理内容 に対して一連の処理をする時「With」ステートメントで ひとくくりで記述できます。 と参考書やwebサイトで見ました。 とりあえず自力で作成した構文は完璧では有りませんが 「With」ステートメントを使えるようになりました。 さて以下の2種類の構文ですがマクロの記録で作成されています。 これを簡素化しようと思ったのですが すでにWith~End Withが散乱しています。 これはもう纏めるのは無理なのでしょうか? 私が思うに同じ単語が何回も出てくるので もう少し簡素化できるのではと挑戦しましたが 誤動作になってしまいます。 すでにWith~End Withでくくられていますので そのくくりはやはり崩すと駄目なのでしょうか? くくり内の2行→1行にする程度が限度でしょうか? これはどのようにすれば簡素化できるのか コツを教えてください。 With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("順番") .Orientation = xlColumnField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("区分") .Orientation = xlColumnField .Position = 2 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("区分名") .Orientation = xlColumnField .Position = 3 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("品名") .Orientation = xlRowField .Position = 3 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("棚番") .Orientation = xlRowField .Position = 4 End With (省略) With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品番") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("仕入") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品名") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("棚番") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("順番") .PivotItems("(空白)").Visible = False End With ActiveWindow.SmallScroll ToRight:=3 With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("親品番") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("親品名") .PivotItems("(空白)").Visible = False End With

  • 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

専門家に質問してみよう