Square Beat Engine

Blog for variety of things…

MS-Office

[Excel][VBA] ピボットテーブルの生成時にメモリ不足(リソース不足)が発生する問題と解決方法

投稿日:2016-06-25 更新日:

エクセルで、ピボットテーブルを生成するマクロを使っていたのだけど、データが大きいとメモリ不足で動作しないことがあったため、改善した。

同じ問題で困っている人のために、自分の解決方法を記載しておくことにする。

起きた問題

今回問題が起きたのは、65536行×269列のデータ。
VBA内でピボットテーブルを生成する際に、リソース不足(メモリ不足)とのことで処理が止まってしまった。

処理中にダイアログが表示されて、なぜかOKボタンしかない。

20160623_1

仕方がないのでOKボタンをクリックすると、メモリ不足で実行時エラー7が発生。

20160623_2

30000行ぐらいに分割すると正常に動いたので、データ量が多いことが原因の様子。
ただ、実際のメモリが不足しているわけではないので、何らかの工夫で解決できると踏んだ。

解決策

結論

PivotCaches.Createの引数のSourceにRange型を入れていたのをAddress文字列にしたところ、メモリ不足は解消された。

コード

元のコードと改善したコードは以下の通り。

コードが長い場合、モジュールを分けると改善するという情報もあったが、今回は効果がなかった。

2時間ほどかけていろいろ調べて、試して、結局8文字追加しただけで解決。
プログラミングって意外と手を動かす時間が少ないんだよね…。

以上!

-MS-Office

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

[PowerPoint VBA] PowerPoint.Shapes.Chart エラー発生

パワーポイント2007のVBAで、予想外のエラーに遭遇し、解決できたのでメモ。 いきなり結論 パワーポイント2007は、インストール直後はPowerPoint.Shapes.Chartを実装していない …

[Excel][VBA] ピボットテーブル「複数のアイテムを選択」の一括OFF

最近、VBAでピボットテーブルの操作にチャレンジしている。 細かい操作をする際に迷うことがあるので、Tipsとして紹介。 「複数のアイテムを選択」をOFF 前提 あらかじめピボットテーブルは作成済み …

[Excel][VBA] クリップボードを経由しないコピーを勧める理由

自分の作ったエクセルマクロには、クリップボード経由のコピーは皆無だ。 その理由はいたってシンプルだ。 クリップボードを使わない理由 自分がマクロでクリップボードを使わない理由はたった1つ。 「ほかの作 …

[VBA] ユーザー定義型の使い方

VBAでは、自分で型を定義することができる。 異なる値をひとまとめに扱いたいときに使うと、取り扱いがぐっと楽になる。 ユーザー定義型の構文 宣言部分(モジュール内の冒頭、Optionalのすぐ後)に、 …

[Excel][VBA] オブジェクト名のワナ

Excel 2010のVBAで、ActiveXコントロール(VBA内ではOLEObject)の名前に罠があることに気づいたのでメモ。 「OLEObjectがうまく動作しない!」と嘆く誰かを1人でも救い …