質問

2016年10月12日 08時55分
  • VBA を利用するとメモリ不足

情シスのオープンナレッジ『Syszo』サービス終了のお知らせ

質問

Excel 2010
Windows 10 pro 64bit
のクリーンイストール環境にて、簡単なVBAを利用すると、メモリ不足エラーになる。ローカル上のファイルでも発生し、OS/Office のパッチは全て当てた。何か設定がありそうですが、今の所発見出来ず。Google 検索で1ページ目に出るような施策は全て実施。設定忘れかもしれませんが、知見をお持ちの方がいらしたら、ご指摘、ご教授よろしくお願い致します。

5件の回答があります

回答

「簡単なVBA」を公開できませんか?

2016年10月12日 09時11分

回答

根本解決ではないかもしれませんが、仮想メモリの割り当てで解決するかもです。
http://pc-karuma.net/windows-10-page-file-settings/

2016年10月12日 11時07分

回答

諸々失礼しました。簡単なコードは以下です。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRng As Range, R As Range, L As Range
Dim LastUpdated As Integer
Set MyRng = Intersect(Target, Range("B2:D18"))
If MyRng Is Nothing Then Exit Sub

LastUpdated = 5

For Each R In MyRng.Rows
Cells(R.Row, LastUpdated) = Now
Next

End Sub

VBA 的には特に問題ないかと思っていたので、以下対処を行いました。
・Excel 設定の確認(保護ビュー無効化、マクロ警告の無効化)
・Excel セーフモードにて確認
・Excel再インストール
・パッチ(Windows Update)の適用、です。
コードについては再度見直してみます。
諸々ヒント、ありがとうございました。

回答

引数でセル範囲を渡して、そのE列に更新日として現在の日時を入れるという関数ですかね。

これは何度(数百~数万回)も繰り返し呼び出される関数でしょうか?
であれば、sysjojoさんの読み通り、ソースに原因である可能性がありますね。
少々、トリッキーなループインデックスの取り方してます。

ループの部分はこういう書き方の方が安定すると思いますよ。

Dim startRow As Integer
Dim endRow As Integer

startRow = MyRng.Rows(1)
endRow = MyRng.Rows(MyRng.Rows.Count)

Dim i As Integer
For i = startRow To endRow
Cells(i, LastUpdated) = Now
Next

数十回以下しか呼ばれない関数であれば、原因は別のところにあると思います。

ご参考まで

2016年10月14日 01時09分
LSD

回答

あ、イベントだったんですね。
早とちり失礼しました。

2016年10月14日 11時07分
LSD

あなたもコメントしましょう!