Excel VBAでのマルチスレッド
■議題
ExcelVBAでマルチスレッドができるか? ■環境 Office 2010 Windows 7(64bit) ■手っ取り早い結論 スレッドはつくれたがやるな ■基本的なお話 ExcelのオブジェクトはSTAのCOMです。なので、複数のスレッドからアクセスしたところで、COMのなかでシリアライズされるので、並行に動作しません。 もし、Excelのセルの描画などを複数スレッドで同時にして速度改善とか思っているなら無駄です。あきらめてください。 参考: Office でのスレッドのサポート ■ExcelVBAでCreateThreadができるか? では、Excelのオブジェクトの操作はあきらめたとしてExcelVBAにおいてWindowsAPIのCreateThreadでスレッドが作成できるか検証します。
このコード非情に不安定です。 作成したスレッド内でブレイクを掛けると堕ちます。デバッグできません。 作成したスレッド内でDebug.PrintやExcelのオブジェクトを操作しようとすると堕ちます。 このプログラムをちょっといじって、さらにスレッドを作成すると堕ちます。 結論として、VBAでCreateThreadを行うのはやめておいたほうがいいです。 ■別解1 Multi-threaded VBAでは別のアプローチを行っています。 詳細は該当ページのExcelをダウンロードして参照していただけるとわかりますが、VBAからVBScriptを起動してそのVBScriptで時間のかかる処理を行い、結果をGetObject("Excel.Application")で取得したExcelオブジェクトを経由してセルに格納しています。 ただし、これはマルチスレッドじゃなく、マルチプロセスですね。 ■別解2 C++なりC#で実装しちゃたほうが楽でしょう
by mima_ita
| 2012-08-27 23:25
| VBA
|
by mima_ita 検索
カテゴリ
全体
実験 VBA 泣き言 管理 メンタルヘルス memo buildbot php テスト subversion book JQuery python R .NET box2d SQLSERVER node.js ruby 未分類 最新の記事
以前の記事
2014年 07月
2014年 06月 2014年 05月 2014年 04月 2013年 12月 2013年 11月 2013年 10月 2013年 09月 2013年 07月 2013年 06月 2013年 05月 2013年 03月 2012年 10月 2012年 09月 2012年 08月 2012年 04月 2012年 02月 2012年 01月 2011年 10月 最新のトラックバック
その他のジャンル
ブログパーツ
|
|||||||||||||||||||||||||||||||||||||||
ファン申請 |
||