Windows7です。
以下ピボットテーブルの記述で2013で動作しますが2007だと動作しません。
しかし2007でもF8で1行づつだと動作しますどうしたら2007で動作するようになるのでしょうか?
'~
With ActiveSheet
Set k = .Range("Y3", .Cells(.Rows.Count, 1).End(xlUp))
End With
With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
SourceData:=k.Address(external:=True))
With .CreatePivotTable(TableDestination:="") '←ここでエラーストップします。
.DisplayNullString = False
.AddFields RowFields:="ランク名", _
ColumnFields:="開始月"
With .PivotFields("売上/月")
.Orientation = xlDataField
.Caption = "合計 : 金額"
.Function = xlSum
.NumberFormat = "#,##0_ ;[red]-#,##0 "
End With
End With
End With
Set k = Nothing
'~
No.5ベストアンサー
- 回答日時:
こんにちは。
> Worksheets.Add After:=ActiveSheet
とした場合もsheet5に作成されました?
この件は、突っ込まれないように触れないでおいたのですが、バレとしまいましたね。ちょっと、難しい説明をしなければならなくなるからです。
Worksheets.Add After:=ActiveSheet
これでできたものを、インスタンスといいます。たい焼きと、その金型とになぞらえれます。金型のことをクラスといい、そして、たい焼きのほうを、インスタンスといいます。
一度作ると、仮想ファイル上に作ったという印が残ります。だから、その作ったものを削除しても、その痕跡を数えて、1,2,3,……と続きます。
Sheet4のシートを削除しても、数えていきますから、Sheet5 となるわけです。もし、次の数字を取る場合は、マクロが数えてあげなくてはなりません。
Worksheets.Add After:=Worksheets(Sheets.Count)
ActiveSheet.Name = "Sheet" & Worksheets.Count
もしも、シートの数が合わないようでしたら、隠しシートが存在することになります。また、途中のシートが抜けている時は、おそらく、既存のシート名とぶつかってしまうので、
実行時エラー '1004'
「この名前はすでに使用されています。別の名前を入力してください。」
というエラーが出てきます。そうすると、マクロとしては、とてもややこしくなってしまいますので、ユニークな名前を予め決めておけば、簡単に済むと考えたわけなのです。
回答有難う御座います。
モヤモヤ残りますが2007でも動作するようになりましたので感謝します。
でも素朴な疑問として2007が出た時ピボットどうしてたのかなぁ~と。
No.4
- 回答日時:
こんばんは。
>しかしsheet5に作成されました?最初のsheet設定数は3です。
>試しに最初のsheet設定数を1にするとsheet3に作成されました?
これに関しては、私は成功するかどうかわからなかったので、深くは書きませんでしたが、それは自由に管理可能です。
どこに置くか?データシートの右隣なら、
Worksheets.Add After:=ActiveSheet
左隣なら、
Worksheets.Add Before:=ActiveSheet
左の先頭なら、
Worksheets.Add Before:=Worksheets(1)
右の最後尾は
Worksheets.Add Before:=Worksheets(Sheets.Count)
[Sheets.Count とかいてWorksheets と書かないのは、グラフシートなどは、Worksheet ではないから、それらを含めると、Sheets になります。]
シート名については、シート番号のようなものですと、同名でエラーになることもあるので、例えば、PivotSheet1 としておきます。
'~'
Worksheets.Add After:=ActiveSheet
ActiveSheet.Name = "PivotData1"
.CreatePivotTable TableDestination:=Range("A1"), _
TableName:="PivotTable1"
End With
と書きます。
回答有難う御座います。
どこに置くか?の件理解出来ました。
>しかしsheet5に作成されました?最初のsheet設定数は3です
の件はWorksheets.Addでsheet4に作成されると思ったのですがsheet5に作成されました。
> Worksheets.Add After:=ActiveSheet
とした場合もsheet5に作成されました?
No.3
- 回答日時:
#2の回答者です。
もう一度、調べてみました。
ピボットは、それそのものがマクロですので、とても扱いにくいのですが、以下の違いを考えてみました。
>2013で動作しますが
>2007だと動作しません。+2007でもF8で1行づつだと動作します
2013は、マクロの動作が遅いということにつきます。
それと、このマクロは新規のシートにピボットを展開するようになっているかと思います。
そこで、
With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
SourceData:=k.Address(external:=True))
Worksheets.Add '←この行を入れる
.CreatePivotTable TableDestination:=Range("A1"), _
TableName:="PivotTable1"
End With
With ActiveSheet.CreatePivotTables(1)
End Wtih
'//
なお、
Set k = .Range("Y3", .Cells(.Rows.Count, 1).End(xlUp))
確認ですが、これは逆向きで、Y3から、A列の範囲の終わりを探すようになっていますが、それは間違いないでしょうね。
回答有難う御座います。
Worksheets.Add追加しましたらおかげさまで動作するようになりました。
しかしsheet5に作成されました?最初のsheet設定数は3です。
試しに最初のsheet設定数を1にするとsheet3に作成されました?
> これは逆向きで、Y3から、A列の範囲の終わりを探すようになっていますが、それは間違いないでしょうね。
の件はネットの記述から持って来た為よく理解していませんでした。
No.2
- 回答日時:
こんにちは。
ヘルプを見てみましたが、
With .CreatePivotTable(TableDestination:="")
TableDestination:="" ではエラーがでるはずです。
ヘルプでは、
「TableDestination 必須
バリアント型 (Variant) ピボットテーブル レポートの配置先範囲 (結果のピボットテーブル レポートを配置するワークシート上の範囲) の左上端のセルを指定します。」
となっています。
例:
.CreatePivotTable TableDestination:=Range("A3"), TableName:= "PivotTable1"
回答有難う御座います。
Withのあとに例:を入れてみたのですが解決しませんでした。
従来のコードでもF8で1行づつなら動くのですが・・・
No.1
- 回答日時:
全くのあてずっぽうで申し訳ありませんが、
エラーとなる個所の前後に、DoEventsを入れてみてはいかがでしょうか。
今回なら
DoEvents
With .CreatePivotTable(TableDestination:="") '←ここでエラーストップします。
DoEvents
のようになるかと思います。
DoEventsは他のスレッドの為にCPUを解放するのが目的ですが、それ以上のことは詳しくは判っていません。
はっきりした目的がある以外は使用しないほうが良いとされていますが、今回のようなケースの場合、
DoEventsで解決する可能性もあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【 Excel】シートの見出しに自...
-
VBAで条件によってシート見出し...
-
EXCELでマクロを使わずに図形の...
-
コマンドボタンがデザインモー...
-
EXCELでワークシートを開いたら...
-
VBA シート名を先月の名前に...
-
エクセルでシートの並び替えで...
-
メッセージボックスでシート名...
-
マクロでの全シート内検索
-
エクセルの複数のワークシート...
-
エクセル・複数のシートを一度...
-
Excelのマクロの呼び出し元を知...
-
複数シートの保護・解除
-
エクセルVBAでcmbBoxのプロパテ...
-
EXCELの起動時に常に同じ...
-
エクセル2013でマクロのボタン...
-
エクセルで串刺ししたシートの...
-
エクセルを開いたとき常に同じ...
-
マクロを特定の複数シートで実...
-
EXCEL 複数シートを1つの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドボタンがデザインモー...
-
マクロを複数シートに実行する...
-
エクセルでシートの並び替えで...
-
【 Excel】シートの見出しに自...
-
EXCELでワークシートを開いたら...
-
EXCELでマクロを使わずに図形の...
-
エクセルの複数のワークシート...
-
VBAで条件によってシート見出し...
-
エクセルを開いたとき常に同じ...
-
マクロを特定の複数シートで実...
-
VBA シート名を先月の名前に...
-
複数シートの保護・解除
-
エクセルで複数のSheetを一括フ...
-
エクセル2013でマクロのボタン...
-
エクセルで回数をカウントする...
-
エクセルで串刺ししたシートの...
-
EXCEL 複数シートを1つの...
-
Excelのマクロの呼び出し元を知...
-
メッセージボックスでシート名...
-
EXCELのエラー
おすすめ情報