富士通さんがExcelで分散環境にアクセスするソリューション()を開発してくれたけれども、それに対してVBA()みたいな反応が多かったので作成してみました。Excel上からVBAを扱おうとするとシングルスレッドではあるものの、十分な速度が出せると思っています。速度が出ない場合は殆どが不適切なコーディングによるものです。以下に高速化するための7つのTIPSを載せます。セルにできる限りアクセスしないExcelはなぜかCellオブジェクトにアクセスするのが非常に遅いです。そのため、Cellオブジェクトには出来る限りアクセスしないほうが良いです。Excelの最後のシートに設定を書き込んだものを用意するとかやる場合がありますが、値が数千回読み込まれるならば一度VBAで全部読み込んでしまって使いまわしたほうが高速化出来る可能性があります。お勧めなのがDictionaryクラス(いわゆるHashTableみたいなの)を使う方法です。メニューから参照設定を追加します。Runtimeにチェックあとはこんな感じ。dic.Item("key")最初に設定内容をDictionary内に読み込んであげてください。CreateObjectを使用する方法もありますが、存在するメソッドを確認できないのでお勧めしません。*1コンパイルを行うあまり意識している人は少ないと思いますが、VBAはコンパイルが必須です。コンパイルができない場合殆どの場合にVBAの実行ができないのですが、たまに実行ができてしまいます。その場合の実行速度は体感で10倍以上も遅いです。いつの間にか遅くなっていた場合はコンパイルができるかどうか確かめてみたほうがいいかもしれません。メニューから、デバッグ→VBAProjectのコンパイルでコンパイルすることができます。コンパイルエラーが出ていたら適切に修正してあげてください。何が適切かについては知りません。区切り位置指定ウィザードを使わないマクロの記録を使用してVBAが組まれている場合にたまにあるのですが、区切り位置指定ウィザードの動作は非常に遅いです。自前でパーサーを作ってください。ちなみにVBAでも正規表現は使えます。X.Xあたりを追加してください。したらRegExpオブジェクトが使えるはずなので、適当に使用できます。ScreenUpdating=falseを入れて画面の描写を抑えるCellオブジェクトに書き込みを行うと、画面への描写も行われるのですが、画面への描写は輪をかけて遅いです。画面への描写を抑えることで高速化出来る余地があります。VBAの起動直後に以下のような記載を入れてあげてください。falseただし、必ず最後にtrueに戻してあげる必要があります。XXXのようなエラーハンドリングを知らないと死ぬので注意してください。エラーハンドリングについて自信がない場合はあまりお勧めできません。Cellへのアクセスを最小限にしていればオプショナルでいいと思います。*2Variantは使用しないVariantは他の型に比べて不要な情報を多く保持していてメモリもたくさん使います。使わないほうがいいです。Stringなどの適切な型を使用してあげてください。Stringみたいな形で。オブジェクトの生成は最小限に抑えるオブジェクトの生成を抑えることでメモリの消費を抑え高速化出来る場合があります。関数内に以下のような記述があったとします。Object以下のように書き換えることでこのオブジェクトはその関数内では1回しか生成されません。Objectfor文の中でたくさん作っている場合には効果があるかもしれません。使う最後に$が付いている関数はVariantではなく文字列を扱います。