【EXCEL VBA】Excelのマルチスレッド(マルチプロセス)サンプルを発見

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

・http://www.excelhero.com/blog/2010/05/multi-threaded-vba.html

・http://www.excelhero.com/blog/2010/05/multi-threaded-vba-update.html

ここのブログのWebスクレイピングのサンプルがマルチ処理の参考になったのでメモ

サンプルコードはここのブログの文中にあるリンクからダウンロードした。

ソースを見ると、マルチ処理を実現する手法としては、

ポイント①Excel VBAからVBscriptを生成する。(ここでマルチ処理用に複数個のscriptを生成)

ポイント②生成されたVBscriptは処理実行後の結果をExcelシートにコピーする。

といったロジックになっている。(マルチプロセス)

このへんがキモ!

他にも、隠しフォームの周期監視処理((JavascriptのsetIntervalの応用)で処理完了数(状態)をチェックしていたり、名前付きセルをうまく使っていたり、IEやMSXML2を使った場合のサンプルコードもあったり、非常に参考になることが多かった。ブログの名前に偽りがないさすがExcelヒーロー

ポイント①Excel VBAからVBscriptを生成する。(複数個)

Swarm_Method => CreateVBScriptAgentAndLaunch より

     ‘ Run VBScript file
    Set wshShell = CreateObject("Wscript.Shell")
    wshShell.Run """" & sFileName & """"

ポイント②生成されたVBscriptは処理実行後の結果をExcelシートにコピーする。

※サンプルを実行すると生成されるコード(SwarmAgent_xx.vbs)より抜粋

Set oXL = GetObject(, "Excel.Application")

‘ Write results to Excel sheet

oXL.workbooks("multithreaded_vba_excelhero.com_experimental.xls").sheets("Demo").Range("$E$80:$L$80") = vResults

ちなみに、ここでダウンロードできるサンプルはExcel2013(64bit)ではすぐ動かなかった。

Sleep にPtrSafeがなくエラーになったので、PtrSafe を追記した。

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

マルチ処理のためにCreatethread/Createprocess等で苦労するより、VBAでできる範囲で頑張る感じが、無理が少なくて良い感じがする。

文書情報

記事タイトル
【EXCEL VBA】Excelのマルチスレッド(マルチプロセス)サンプルを発見
作成日
更新日
Source URL
https://papanda925.com/?p=488

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました