top of page

​タグ一覧

配列処理(75)

階層化フォーム(33)

シート・セル操作(30)

ファイル操作(29)

開発事例(26)

図形操作(18)

設計思想(13)

講座実施報告(12)

開発効率化(10)

ユーザーフォーム(10)

コード自動生成(10)

ココナラ(9)

数学(8)

文字列操作(8)

GAS(7)

Webアプリ(6)

イベントプロシージャ(5)

副業(5)

アニメーション(5)

技術解説(4)

イミディエイトウィンドウ(4)

OneDrive(4)

Googleスプレッドシート(4)

クリップボード(4)

条件付き書式(4)

その他(4)

介護・福祉(4)

小説(3)

HTML(3)

JavaScript(3)

Enum(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Outlook(2)

Discord(2)

シフト表(2)

LookerStudio(2)

日報(2)

カレンダー(2)

公開ツール(2)

パズル(2)

小ネタ(2)

コード解説(2)

クラスモジュール(2)

Antigravity(2)

デスクトップアプリ(2)

スクレイピング(1)

スプレッドシート(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

超勉強会(1)

溶接ロボット(1)

楽天市場(1)

経理(1)

医療(1)

文書作成(1)

発注書(1)

WebAPI(1)

学校(1)

CAD(1)

PowerShell(1)

python(1)

VBAのStop地点をAutoHotkeyで自動F5して連続処理する|Power QueryでのPDF連続読み込みを自動化

Excel VBAでループ処理を書いていると、「どうしても処理を一度止めないと先に進めない」場面に出会うことがあります。とくに Power Query の読み込みが絡むと、読み込みが完了するまで待つために処理を Stop で止め、完了を確認してから人が F5 を押して再開する、という運用にせざるを得ないケースがあります。

1件や2件ならそれでも構いませんが、何百件も処理するとなると、人が F5 を押し続けるのは現実的ではありません。この記事では、その F5 押下を外部プログラム(AutoHotkey)に自動で代行させ、連続処理を自動化した実務上のテクニックを紹介します。かなりニッチな場面ですが、同じ壁に当たった方の参考になれば幸いです。

 

なぜ処理を止める必要があるのか

今回の題材は、Power Query で特定のPDFファイルをワークシートに接続して読み込んでいる状態から、接続先のPDFファイルパスを差し替えて別のPDFを読み込み直す、という処理を VBA で連続実行したいケースです。何百件ものPDFを1件ずつ Excel に変換していくイメージです。

ここで問題になるのが、Power Query の読み込みは非同期的に進むという点です。VBAから接続先を書き換えて再読み込みを指示しても、読み込みが終わる前に次の処理へ進んでしまうと、結果が正しく反映されません。かといって単純な待機(Wait)だけでは読み込み完了を確実に捉えきれない場面があり、私の経験上、処理を一度 Stop で止めて読み込み完了を確認し、そこから再開させるのが最も確実でした。

つまり、1件ごとに「PDF読込 → Stop → 完了を待って再開」という流れを繰り返すことになります。この「再開」が、通常はVBエディタで人が F5 を押す操作にあたります。

 

仕組みの全体像

左が従来のやり方、右が今回のAutoHotkey連携です。従来は「Stop」で止まったあと、人が F5 を押して再開していました。何百件もあると、この「人が操作」の部分がそのまま手間になります。

全体構成

今回のやり方では、この F5 押下を外部プログラム(AutoHotkey で構築)に代行させます。おおまかな流れは次のとおりです。

  • VBA側は処理の開始時に外部プログラムへ起動指示を出す

  • 1件のPDFを読み込んだら、VBA側が「少し待ってから F5 を押してほしい」という遅延F5実行指示を外部プログラムに渡す

  • 外部プログラムは指示を受け取り、指定された待機時間だけ待ってから、VBエディタのウィンドウをアクティブにして F5 を送る(これでVBAが再開する)

  • すべて終わったら、VBA側が終了指示を出して外部プログラムを終了させる

VBA側と外部プログラムのやり取りは、コマンドファイル(command.txt)を介して行います。VBA側がコマンドを書き出し、外部プログラムがそのファイルを監視して内容に応じた操作を実行する、というシンプルな連携です。外部プログラムは「どのウィンドウに F5 を送るか」を、Excel のプロセスID(PID)を手がかりにVBエディタのウィンドウを特定して判断します。これにより、他のウィンドウを誤操作せず、対象のVBエディタにだけ F5 を送れます。

 

外部プログラム(AutoHotkeyコントローラー)の中身、つまり command.txt をどう監視して、どうVBエディタを特定して F5 を送っているのかというコードの詳細は、別記事で1行ずつ解説しています。あわせて読むと、この連携の内部動作まで理解できます。

 

デモ動画

実際に連続で F5 が自動送信され、処理が止まらずに進んでいく様子です。人は何も操作していません。

 

実行サンプルの使い方

配布しているサンプルブックには、AutoHotkeyコントローラーのフルパスを設定するためのシートと、動作を試すためのボタンが用意してあります。

実行サンプルの使い方

手順はシンプルです。

  • 配布した AutoHotkeyコントローラーのzipを解凍し、中の実行ファイル(.exe)を任意の場所に置く

  • サンプルブックを開き、「ファイル選択」ボタンからその実行ファイル(.exe)を選ぶと、フルパスがセルに入る

  • 「実行テスト」ボタンを押すと、外部プログラムが起動し、F5 の自動送信を含む一連の動作を試せる

まずはこのサンプルで、外部プログラムからVBエディタに F5 が送られて処理が再開する挙動を確認してみてください。挙動をつかめれば、ご自身の連続処理にも組み込みやすくなります。

 

サンプル・ツールのダウンロード

下記の2つをダウンロードすれば、実際に手元で動かして確認できます。

  • 上がマクロ付きのサンプルブック(zip)、下が外部プログラム本体(zip、中身は実行ファイル)です

  • どちらもマクロや実行ファイルを含みます。怪しいものではありませんが、こうしたファイルは取り扱いに注意すべきものなので、ご利用は自己責任でお願いします。中身に不安がある場合は、次に紹介する解説記事でコントローラーのソースコードを全文公開していますので、内容を確認したうえでお試しください

  • 実行ファイルはAutoHotkey v2で作成しています

外部プログラムのソースコードの中身、つまりコントローラーが実際に何をしているのかは、AutoHotkeyでExcel VBEにF5を送る常駐プログラムの作り方で全文を公開し、1行ずつ解説しています。

 

まとめ

Power Query の読み込み完了を待つために VBA を Stop で止め、人が F5 で再開する——という処理は、件数が増えるほど手間が跳ね上がります。今回のように、F5 押下だけを外部プログラムに切り出して自動化してしまえば、あとはVBAの流れに任せて連続処理を回せます。

ポイントは、VBA単体で無理に解決しようとせず、「人がやっているキー操作」を外部プログラムに肩代わりさせる、という発想の切り替えです。同じように「どうしても止めないと進まない」処理でお困りの方は、一つの選択肢として検討してみてください。外部プログラム側の具体的な作りは、AutoHotkeyでExcel VBEにF5を送る常駐プログラムの作り方で解説しています。

関連記事

すべて表示

Excel VBAによる業務自動化・ツール開発をご検討の方へ

​"脱Excel"の前に、現状のExcelの潜在能力を120%発揮してみませんか?

softex-celwareロゴ 透過 横長.png

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page