マルチコアとVBA
今使っているパソコンが
シングルコアかマルチコアかは
タスク マネージャでわかります。
タスクマネージャは
「ファイル名を指定して実行」で
taskmgr.exe
と入力してOKを押して実行できます。
タスクマネージャの「パフォーマンス」のところ
「CPU使用率の履歴」の枠を見てください。
シングルコアは
ダブルコアは
クアッドコアはここが4つになっています。
長く時間のかかるプロシージャを実行してみると
シングルコアの場合
CPU使用率が100%くらいになります。
一方、ダブルコアの方は
CPU使用率は50%くらいです。
なぜかといって調べてみると
どうもExcel2000がマルチコアに対応していない
らしいのです。
いろいろ検索して
こんなページを見つけました。
パソコン雑誌:DOS/V POWER REPORTのWebページです。
2007 Office systemはマルチコア CPUで使え!
なるほど、
ここを読むと
マルチコアに対応しているOfficeのバージョンは
2007からで
それ以前のバージョンは
マルチコアのパソコンで使っても
CPUを使い切れないみたいです。
そーかー
このマルチコアのパソコンも
Office2007にすれば
もっと速くなるんだー
と思った方、待ってください。
私はこれで失敗しました…
何日もかかるプロシージャを実行していた私は
この情報でOffice2007に飛びつきました
(OEM版ですが、あはは)
届いて早速使ってみました。
遅いです(泣)
タスクマネージャで見てみると
確かにCPUはフルに使えているようなんですが
遅いです(泣)
なじぇーと思ってまた検索…
こんなんでましたけど~
msdnのページです。
VBAのユーザー定義関数は
常にメイン スレッドで動作し、何個のプロセッサまたはスレッドが使用されていても、一度に 1 つずつしか実行できません。
とあります。
FunctionプロシージャとSubプロシージャの違いは
値を返すか返さないかで
中でやってることは自分でプログラムしたものなので
結局、自分で作ったプロシージャは
マルチコアのパソコンで
Excel2007で実行しても速くならない。
こう、私は理解しましたが(知識不足で確信できません)
もちろん、マルチスレッド計算以前の
VBAマクロを速くする工夫あってのことです。
それにしても
同じ「何日もかかるプロシージャ」を
同じパソコンを用いて
Excel2007とExcel2000の両方で実行したところ
Excel2007の方が遅くてビックリです。
同じくらいなら納得できますが…
最終的にOffice2007はお蔵入りに…
このmsdnのページはExcel2007でなくても
参考になります。
特に、
今までプロシージャの速度を測るのに
Time 関数を使っていたので
MICROTIMER() 関数は重宝しそうです。
| 固定リンク
この記事へのコメントは終了しました。

コメント