• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:このVBAの処理を速くしたいのですが…)

VBA処理を高速化する方法

このQ&Aのポイント
  • VBAの処理を高速化する方法について教えてください。
  • 現在は10分程度かかってしまっているので、この時間を短縮する方法があれば教えてください。
  • data.xlsmとBook1-Book25.xlsxの合計26ファイルを開いた状態で、マクロを実行しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

まず、マクロの先頭に application.calculation = xlcalculationmanual 一番最後に application.calculation = xlcalculationautomatic を置いて、コピー貼り付けしてるあいだ再計算を手動に変えて実行する事で、改善しないか確認してみて下さい。 次に、今のマクロでは100万行ものセルを一生懸命動かそうとしてますが、ホントにそんな大量のデータを詰め込んで実際の仕事をしているのですか? たとえば dim LastRow as long lastrow = worksheets("Book1.xlsx").worksheets("Sheet1").range("A1048576").end(xlup).row workbooks("data.xlsm").worksheets("Sheet1").range("A1:D" & lastrow).value _ =workbooks("Book1.xlsm").worksheets("Sheet1").range("A1:D" & lastrow).value といった書き振りで、少しでも改善しないか試してみます。

a5224661
質問者

お礼

ありがとうございます。 application.calculation = xlcalculationmanualを試してみましたが 出てきた数値がすべて0だったので駄目でした。 dim LastRow as longの方も試してみましたが 質問した時のマクロ使用時とほぼ変わりませんでした・・ 最大で20万件ほどのはずなので少し数字を弄ってみます。

その他の回答 (2)

回答No.3

こんにちは。 >Application.Calculation = xlCalculationManualを試してみましたが >出てきた数値がすべて0だったので駄目でした。 これは、一度、計算させてからにすればよいのですが、逆に時間が掛かってしまう可能性はありますね。 コード自体は、無駄があるのは知っています。しかし、理論的には、モノがない所にモノを実体化させて、つまり、例えば、ないところのセルを含めて、「A1:E1048576」と現実的ではない範囲を使えば、その分だけ余計なオブジェクトを抱えることになります。触らぬ何とかといいますが、これもその内です。セルを認識させれば、とたんにオブジェクト自体が膨らんでしまいます。 一端、大きな空のデータを処理させて、バッファを大きくさせてから行えば、速くなる可能性がありますが、「大きな空のデータを処理させる」こと自体のタイムロスが発生してしまいます。 私には、元のコードと比較して、#1のコードで改善が見られないとは思えないのですが、それでダメなら、別の要因があるのか、現状では、無理だと諦めるしかないと思います。 なお、私の場合、今回は同じようなケースとは言えませんが、ひじょうに時間の掛かる数年分の大量の数式計算をマクロに変えてしまうことで、劇的に解決したことがあります。また、これは数式内容にも依存します。

a5224661
質問者

お礼

ありがとうございます。 何か方法を考えたいと思います

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

>出てきた数値がすべて0だった あなたのエクセルの具体的な中身がナイショのままなので、具体的にどこをどう手を入れたらいいのかはご質問の範疇外ですが、ここまでの断片的な情報からは 0.(問題外ですが)xlcalculationmanualだけ追記して、自動に戻してない 1.マクロの問題以前に、そもそもブックに仕込まれてるどれかの数式の効率が悪い(重い) 2.データの記入→途中で中間計算→中間計算結果を更にコピーして転記→また計算のような段取りにしてて失敗している といった状況が想像できます。 まぁ、数式を全部開示してイチイチ効率の良い計算方式に改めるのは現実的じゃないんで、重そうな数式に絞って改善策を別途ご相談なさってみて下さい。 20万行のデータを対象に計算してるとなると、確かに色々と工夫の余地はありそうです。 また必要なデータだけ記入したら、後は一気に計算できるようにシートの(計算の流れの)構成を見直して、先に回答した再計算手動・自動を適切に配置してご利用ください。

a5224661
質問者

お礼

何度もありがとうございます。 ご回答の2に当てはまっています・・・ もう少しスムーズに流れるように出来ないか考えてみます。