以下のすべてがExcel 2007以前に適用されます。による リンク 上記のコメントを投稿しましたが、Excel 2013でのマルチスレッドのネイティブサポートがあります。
残念ながら、VBAはマルチスレッドをサポートしていないため、VBAの計算はプロセッサの1コアに制限されます。
ただし、VBスクリプトファイルを生成してそれらを同時に実行することによって、VBAをトリックして複数のスレッドを実行するようにする高度な方法があります。これは、Excelプロセスの外部でコードを実行することで問題を回避し、Windowsがさまざまなスレッドに割り当てられたリソースを管理できるようにします。
そうは言っても、これを機能させることはあなたのコードのロジックを完全に再考することをおそらく意味するでしょう(すなわち、それらを並行して実行するのに意味がある方法でタスクを分割する方法を考え出す必要があるでしょう)。あなたのプロジェクトには非常にうまくいきません。私はこれを自分で実装したことは一度もないので、私がすでにあなたに言ったことを言うことによってあなたをこれ以上助けることはできません。
あなたがウサギの穴に足を踏み入れたいのであれば、ただし、ここでは 面白いブログ記事 それが行われている例を示しています。警告:あなたが熟練したプログラマーでない限り、あなたはこの考えを忘れてVBAがシングルスレッドで動くことを受け入れるかもしれません。
大胆な人のためのスタックオーバーフローに関するその他のリソース:
https://stackoverflow.com/q/19159025/657668
https://stackoverflow.com/q/5721564/657668
もちろん、マルチスレッドを使わずにVBAコードを最適化する方法は他にもあります。あなたのコードを見なくても、鋭い提案をすることは不可能ですが、ここではふつうの疑いがいくつかあります。
- 処理速度を上げるために、シートからデータを配列にロードしてください。ワークシートとのやり取りはVBAの実行における大きなボトルネックであり、配列を操作することで最小限に抑えることができます。
- 関連する問題は、セルに変更が加えられるたびにExcelがブックを再計算することです。これを設定することで回避できます
Application.Calculation = xlManual
。必ず元に戻してください。 Application.Calculation = xlAutomatic
あなたの潜水艦を出る前に。