WinActor(ウィンアクター)
教えて !! スーさん。
第5回「シナリオの実行速度の向上を検証してみる」の巻
目次
- 第5回「シナリオの実行速度の向上を検証してみる」の巻1
- 第5回「シナリオの実行速度の向上を検証してみる」の巻2(今回)



そうですね。両方とも正解です。
グループを閉じる、WinActor画面を最小化する、というのはどちらも画面描画を行わないようにする、ということになります。
シナリオを実行する際に画面描画を行うことは、それなりの処理時間を費やしているということです。 そのため、画面描画を停止することで実行速度の向上が見込まれます。
まず、グループを閉じた状態で検証してみます。
先ほどのシナリオの中で、Excelの処理を行っているグループを閉じました。
シナリオを実行します。
グループを閉じる、WinActor画面を最小化する、というのはどちらも画面描画を行わないようにする、ということになります。
シナリオを実行する際に画面描画を行うことは、それなりの処理時間を費やしているということです。 そのため、画面描画を停止することで実行速度の向上が見込まれます。
まず、グループを閉じた状態で検証してみます。
先ほどのシナリオの中で、Excelの処理を行っているグループを閉じました。
シナリオを実行します。


結果は35秒でした。
9秒ほど実行時間が短縮されていますね。
9秒ほど実行時間が短縮されていますね。


次に、WinActor画面を最小化して検証してみます。
Excel処理の前後に「WinActorウィンドウを最小化」と「WinActorウィンドウを元に戻す」のライブラリを配置します。
Excel処理の前後に「WinActorウィンドウを最小化」と「WinActorウィンドウを元に戻す」のライブラリを配置します。


⑨「WinActorウィンドウを最小化」ライブラリです。
設定値等はありません。
設定値等はありません。


⑩「WinActorウィンドウを元に戻す」ライブラリです。
こちらも設定値等はありません。
こちらも設定値等はありません。


結果は34秒でした。
グループを閉じた場合とほぼ同じ結果となりました。
グループを閉じた場合とほぼ同じ結果となりました。


実行速度の向上が見込めそうなことで、他には何か考えられることはありますか。

画面描画ということであれば、Excelの画面も最小化するというのもあるのかなと思いました。

良いですね。それではそちらも検証してみましょう。
Excelファイルを開いた後に、Excel画面を最小化して、処理が終わったら元の画面に戻すようにシナリオを変更しました。
Excelファイルを開いた後に、Excel画面を最小化して、処理が終わったら元の画面に戻すようにシナリオを変更しました。


⑪「ウィンドウの表示変更」ライブラリです。
表示状態で「最小化」を選択します。ウィンドウ識別名でExcelの画面を指定します。
表示状態で「最小化」を選択します。ウィンドウ識別名でExcelの画面を指定します。


⑫「ウィンドウの表示変更」ライブラリです。
表示状態で「通常表示」を選択します。ウィンドウ識別名でExcelの画面を指定します。
表示状態で「通常表示」を選択します。ウィンドウ識別名でExcelの画面を指定します。


では、こちらのシナリオを実行してみます。
結果は35秒でした。
グループを閉じた場合と同じ9秒の短縮となりました。
結果は35秒でした。
グループを閉じた場合と同じ9秒の短縮となりました。


Excel画面を最小化した場合も、WinActor画面を最小化した場合と同じくらい実行速度が向上できるんですね。

他に何か実行速度の向上が見込めそうなものはありますか。

いえ、他に思いつくものはありません。

では、私の方から1つ提案したいと思います。
それは、変数の共有化です。
「Excel開く(前面化)」などのスクリプト実行のライブラリで、プロパティのスクリプトタブを開くと、 「変数を他のスクリプト実行アクションと共有する」というチェックボックスがあります。
このチェックボックスについて操作マニュアルには以下の説明が書かれています。
「チェックを付けると、スクリプト実行間で変数を共有することができ、値を引き継ぐことができます。」
この説明だけだとよくわかりませんが、変数を共有して値を引き継ぐことにより実行速度の向上が見込まれます。
それは、変数の共有化です。
「Excel開く(前面化)」などのスクリプト実行のライブラリで、プロパティのスクリプトタブを開くと、 「変数を他のスクリプト実行アクションと共有する」というチェックボックスがあります。
このチェックボックスについて操作マニュアルには以下の説明が書かれています。
「チェックを付けると、スクリプト実行間で変数を共有することができ、値を引き継ぐことができます。」
この説明だけだとよくわかりませんが、変数を共有して値を引き継ぐことにより実行速度の向上が見込まれます。


それでは検証していきましょう。
②「Excel操作(前面化)」ライブラリ
④「Excel操作(値の取得2)」ライブラリ
⑤「文字列置換」ライブラリ
⑥「Excel操作(値の設定2)」ライブラリ
それぞれのスクリプトタブで「変数を他のスクリプト実行アクションと共有する」のチェックボックスをチェックしました。
シナリオを実行してみます。
結果は14秒でした。なんと30秒も短縮できました。
②「Excel操作(前面化)」ライブラリ
④「Excel操作(値の取得2)」ライブラリ
⑤「文字列置換」ライブラリ
⑥「Excel操作(値の設定2)」ライブラリ
それぞれのスクリプトタブで「変数を他のスクリプト実行アクションと共有する」のチェックボックスをチェックしました。
シナリオを実行してみます。
結果は14秒でした。なんと30秒も短縮できました。


えー、ダントツに早くなってなんかすごいですね。
変数を共有することで実行速度が大幅に短縮できることがわかりました。
変数を共有することで実行速度が大幅に短縮できることがわかりました。

ここまでは実行速度向上の対応をそれぞれ単独で実施してきましたが、今度は組み合わせて実施してみます。
グループを閉じるとWinActor最小化はどちらも同じ効果が見込まれるので、今回はWinActor最小化を採用します。
WinActor最小化とExcel最小化を組み合わせて実行したところ、結果は27秒でした。
グループを閉じるとWinActor最小化はどちらも同じ効果が見込まれるので、今回はWinActor最小化を採用します。
WinActor最小化とExcel最小化を組み合わせて実行したところ、結果は27秒でした。


さらにそれにプラスして変数共有化を組み合わせて実行したところ、結果は8秒でした。


それでは実行速度向上の検証結果を整理してみましょう。
このような結果になりました。
このような結果になりました。


組み合わせることでさらに実行速度の向上ができましたね。
それにしても変数の共有化は最強ですね。
それにしても変数の共有化は最強ですね。

今回はWinActorシナリオの実行速度の向上に関する検証を行いました。
大量の繰返し処理があるなどで実行時間がかなりかかっているというような場合に、実行時間の短縮に向けて検討の余地があると思いますので参考にしてみてください。
大量の繰返し処理があるなどで実行時間がかなりかかっているというような場合に、実行時間の短縮に向けて検討の余地があると思いますので参考にしてみてください。

今回もいろいろと参考になりました。
ありがとうございました。
ありがとうございました。
目次
- 第5回「シナリオの実行速度の向上を検証してみる」の巻1(今回)
- 第5回「シナリオの実行速度の向上を検証してみる」の巻2