ExcelVBAでのCPU割り当てについて。


windows7 64bit core i7のノートパソコンを使っています。
ExcelVBAの処理速度について疑問をもち色々と検証していたのですが(内容はhttp://q.hatena.ne.jp/1310963018
単純なループを一回する毎にカウンターがひとつ進むコードをかきリソースモニターをみていたら、
6つあるコアのうち、ひとつだけが100%近くになっていました。
素人考えでは、これが分散化され複数のコアで計算出来れば、処理速度もアップするのでは?
と思います。

・セルの自動計算は手動にしています。
・オプションのコアの割り当ては6個にしています。

質問の内容は、VBAを複数のコアで処理するようにできるのか?
出来ない場合でもこうすれば高速化できるヨ みたいなのがあれば教えていただきたいです。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/07/18 20:47:33
  • 終了:2011/07/20 10:42:11

回答(3件)

id:SweetSmile1978 No.1

SweetSmile1978回答回数191ベストアンサー獲得回数292011/07/18 21:41:40

ポイント250pt

Excel 2007 以降はマルチコアCPUにも対応していますが、

ユーザが作った関数などはマルチコア対応ではありません。

通常マルチコアを有効に使うためにはマルチスレッドでの処理を行います。

残念ながらVBA単独でのマルチスレッド処理はできないと思います。

アドインを作ってやることで出来そうな記述もありますが、

実際に作ったことがないのでわかりません。

言語も C/C++ または C# などの知識と

マルチスレッドに関する知識が必要になります。

Excel 2007 におけるパフォーマンスの改善

http://msdn.microsoft.com/ja-jp/library/aa730921.aspx#aa730921_topic9

Excel 2007 のアドイン (XLL) の開発

http://msdn.microsoft.com/ja-jp/library/aa730920(v=office.12).aspx

id:lupink

なるほど、そもそもVBAがマルチスレッド対応していないのですね。

回答ありがとうございました。

2011/07/19 13:23:34
id:karuishi No.2

ニャンざぶろう回答回数764ベストアンサー獲得回数1282011/07/18 21:43:43

ポイント250pt

VBAでは複数のコアで計算する、マルチスレッド対応プログラムは書けないようです。

 

>Excel2007 から ワークシート関数がマルチスレッド対応になっていますが、マルチスレッド対応の UDFs を作成できるのは XLL だけで、VBA・COM・XLM ではマルチスレッド計算を行うことはできません。

http://supermab.com/wp/%E3%81%AA%E3%81%9C-excel-dna-%E3%81%AA%E3%81%AE%E3%81%8B%EF%BC%9F/

 

>クラスター セーフなユーザー定義関数は XLL で実装する必要があります。VBA や COM オートメーション アドインでは、クラスター セーフなユーザー定義関数を作成できません。

http://technet.microsoft.com/ja-jp/library/cc179167.aspx

id:lupink

詳細な回答ありがとうございます。

また高速化のアドバイスもありがとうございました。

2011/07/19 13:25:17
id:qweertyuiop No.3

ジュードマテイス回答回数10ベストアンサー獲得回数02011/07/19 22:56:46

Excel 2007 以降はマルチコアCPUにも対応していますが、

ユーザが作った関数などはマルチコア対応ではありません。

通常マルチコアを有効に使うためにはマルチスレッドでの処理を行います。

残念ながらVBA単独でのマルチスレッド処理はできないと思います

id:lupink

回答ありがとうございます。

2011/07/20 10:40:04

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません