私はExcel用のマクロを持っていますが、あまりにも派手なものはなく、オブジェクトもありません。数式を使った単純な古いサイクルです。基本的にはこれです:
1 つの列の行を循環し、かなり大きな SUMPRODUCT 関数を実行せずにセルに割り当てます。行を循環したら、Range.Value = Range.Value を 2 回実行して数式を実行し、結果を値として保存します。それでは、次のコラムに進みます。
Excelで使用される各列のメモリが大幅に増加し、マクロが完了してファイルを保存した後も、メモリは引き続き使用されます(タスクマネージャーを信頼できる場合)。ファイルを閉じて再度開くと、もちろんすべてのメモリが解放され、作業を続行できます。メモリの制限により、32 ビット Excel で必要なすべての列を処理できないところまで来ました。
Excel が記憶している内容を忘れさせるために、列間に実装できるトリックがあるのではないかと思っていました。パフォーマンスが向上するかどうかはあまり気にしません (さらなる計算に役立つものがキャッシュされている場合)。メモリ使用量が大きくなりすぎて処理できないようにする必要があるだけです。私は少しグーグルで調べましたが、すべてのアドバイスは大きなオブジェクトを何も設定しないことに関連しています.
コードは次のようなものです (今は手元にありませんが、内容を簡略化した一般的なバージョンです):
for i = 1 to 12
ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Font.Color = vbWhite
for m = 1 to x
ThisWorkbook.ActiveWorksheet.Cells(m, i).Formula = "'=SUMPRODUCT(blah)"
next m
ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value = ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value
ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value = ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value
ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Font.Color = vbBlack
next i
基本的に、乱雑な関数テキストが表示されないように白く色付けし、関数を追加して実行し、値として保存し、テキストを黒くします。 重要な追加: SUMPRODUCT を使用して、閉じたファイルからいくつかのセルを合計します。