
とある理由があり、VBAでピボットテーブルを生成しようとしています。
ピボットキャッシュを生成する為に下記構文を用いていますが特定のパソコンで
Set PCache1のところで型が一致しないと出ます。
Dim lastRow As Long
Dim PCache1 As PivotCache
Dim PivotS1 As Worksheet
Dim DataS1 As Worksheet
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Set PivotS1 = Worksheets("ITEM-STOCK")
Set DataS1 = ActiveWorkbook.Worksheets("ITEM-STOCK")
Set PCache1 = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=DataS1.Range("A1", DataS1.Cells(lastRow, 2)))
尚、
SourceData:=DataS1.Range("A1", DataS1.Cells(lastRow, 2))
を
SourceData:=DataS1.Range("A1:B1000000")・・・特定のパソコンで同じエラー
SourceData:=DataS1.Range("A1:B10000")・・・特定のパソコンでもエラー発生せず
になったので、バージョンによって格納できる桁数が違う?のかなと思っていますが
対処方法あるでしょうか?(100万行を超えるデータ数です)
エラー発生しないVBAバージョン7.1
エラー発生するVBAバージョン6.5
No.2ベストアンサー
- 回答日時:
当方でためしてみましたら、
・Excel2000(VBE6.dll)→エラー
・Excel2010(VBE7.dll)→エラー無し
となりました。
エラーが出るほうの「PivotCaches」コレクションには、「Create」メソッド自体が無く、「Add」メソッドでした。
つまり、Excelのどこかのバージョンで「Add」メソッドが無くなり、「Create」メソッドに変更になったという感じに見えます。
そして、「Add」メソッドと、「Create」メソッドは、構文が異なるようです。
「エラー発生するVBAバージョン6.5」ということでしたら、Excelのバージョンは2007でしょうか?
あるいは、2003などに互換パックなどが適用されている感じでしょうか?
多分、ですが、
・VBAバージョン6.5→VBE6.dll
・VBAバージョン7.1→VBE7.dll
が使われている気がするので、それぞれのdllファイルの場所を検索して、パスが異なっていたら、バージョン違いが原因かもしれません。
(通常、VBE6.dllと、VBE7.dll の格納場所は異なります。また、2003までがVBE6.dllで、2010以降は確実にVBE7.dllですが、2007がどうだったか忘れてしまいました。)
なので、エラーが出るExcelのバージョンがもし2007以前なら、
・Excel自体を2010以降のバージョンに切り替えるか、
・「エラーがでるパソコンの側」のExcelの「VBEのヘルプ」で、
「PivotCaches」コレクションを調べ、
もし、そのメンバーに「Create」メソッド自体が無く、
「Add」メソッドがあったら、「Add」メソッドの構文に書き換える、
などをしてみてはいかがでしょうか?
逆に、エラーの出るパソコンが2010以降でしたら、イミディエイトウィンドウで「? PCache1.SourceData」とやったりして、その内容に差異が無いか、あるいは、ローカルウィンドウなどで変数やプロパティの値に差異が無いか、などを調べないといけないと思います。
また、2010のExcelのほかに、2003などの古いバージョンが共存しているとどうなるのか、もしそうい状況でしたら、その場合の「PivotCaches」コレクションの「Create」メソッドや「Add」メソッドについても調べないといけなくなると思います。
No.3
- 回答日時:
なんどもすみません。
古いバージョンのExcelの場合で、AddメソッドでPivotCacheを新規作成する場合、SoueceDataプロパティにRangeオブジェクトを指定すると、なぜかエラーになってしまうので、次のような感じになるっぽいです。
もしかしたら、今回のエラーもそれが原因かも?しれません・・・(検証してません。すみません。)
Sub MkPvt_Ver2000()
Dim lastRow As Long
Dim PCache1 As PivotCache
Dim PivotS1 As Worksheet
Dim DataS1 As Worksheet
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Set PivotS1 = Worksheets("ITEM-STOCK")
Set DataS1 = ActiveWorkbook.Worksheets("ITEM-STOCK")
Set PCache1 = ActiveWorkbook.PivotCaches.Add( _
SourceType:=xlDatabase, _
SourceData:="ITEM-STOCK!A1:B" & lastRow)
'↑「シート名!セル範囲」でソースを指定
'なぜかRangeオブジェクトでの指定が
'エラーになるので
'同じシートにピボット作成
PCache1.CreatePivotTable _
TableDestination:=PivotS1.Range("A20"), TableName:="ピボット01"
ActiveSheet.PivotTables("ピボット01").SmallGrid = False '不要ならコメントアウト
End Sub
ありがとうございます。
ご教授頂きました内容で実行しようとしましたが、
ピボットの行にデータをセットしようとすると
「元のデータのフィールドには、ピボットテーブルレポートで使用できる個数
より多い固有アイテムが・・・」というエラーが出てしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について
-
エクセルの複雑なシフト表から...
-
エクセルのリストについて
-
【マクロ】元データと同じお客...
-
【画像あり】オートフィルター...
-
【マクロ】【相談】Excelブック...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
Office2021のエクセルで米国株...
-
【マクロ】数式を入力したい。...
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
他のシートの検索
-
【マクロ】左のブックと右のブ...
-
Amazonでマイクロソフトオフィ...
-
vba テキストボックスとリフト...
-
【マクロ】【配列】3つのシー...
-
【マクロ】列を折りたたみ非表...
-
【マクロ】オートフィルターの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えてください。vb5.0
-
エラー「メソッドまたはデータ...
-
実行時エラー450:引数の数が一...
-
get() と find() の違いについて
-
Csvファイルの最終行を取得する...
-
VBAで型が一致しないエラー(バ...
-
エクセルVBA オートフィルタで...
-
メソッド定義の構文のdefって
-
A1の値をファイル名に指定した...
-
予約語の使い方教えて
-
メソッド定義の際の引数で
-
Ruby on Rails 「attr_accessor...
-
Pythonで複数のメソッドをまと...
-
try ~ catch構文が使えない
-
rubyでは比較演算子もメソッド...
-
COMコンポーネントの構造の本質...
-
名前空間
-
正規表現で両端に文字列を置換
-
【Ruby on Rails】モデルのメソ...
-
Rubyのprettyprintについて
おすすめ情報