※ 本記事は「RPA(ロボティック・プロセス・オートメーション) Advent Calendar 2022」23日目(カレンダー2)の記事となります。
12月23日、RPACommunity主催で「【自動化やIT活用ネタ】ライトニングトーク大会 X’masスペシャル!」が開催されました。
クリスマススペシャルということで非常に豪華な登壇者陣のなか、僭越ながら私も末席に名を連ねることになりました。
ただ、諸事情によりリアルタイムでの参加が難しくなってしまったため、事前収録した動画を当日流していただく形での参加となっています。
今回の記事のタイトルでLTを行いましたが、時間が限られており、内容をカットした部分もあるため、以下で内容を補足させていただきます。
LT資料
LTで使用した資料は下記にアップしていますので、まずはこちらをご参照ください。
PADに用意されている標準のExcel関連のアクション
PADには標準でExcelを操作するためのアクションが多数用意されており、ある程度の処理はできるようになっています。
ただし、これら標準のアクションだけでは足りない部分もあり、“例えば選択したセル範囲の内容をクリアする”といった処理も、セル選択まではできるのですが、肝心のクリア処理のアクションは用意されていません。
そのため、通常であれば下記動画のようにマウスやキーボード操作によって処理を行うことになるのですが、どうしても安定性に欠けてしまいます。
また、時間の都合上カットしたデモ動画もあわせてアップいたします。
まずはアクセスキーの送信により指定したセル範囲をクリアするフローのデモです。 #RPALT pic.twitter.com/0tupEAgY8B— きぬあさ (@kinuasa) December 23, 2022
Excelのコマンドを実行するためのスクリプト
そこでオススメするのがスクリプトによってExcelのコマンドを実行する方法です。
PADにはスクリプトを実行するためのアクションが標準で用意されており、例えば「VBScript の実行」アクションで下記スクリプトを実行すると、起動中のExcelで『すべてクリア』コマンドを実行することができます。
GetObject(, "Excel.Application").CommandBars.ExecuteMso "ClearAll"
上記スクリプトでは、
- 起動中のExcelを取得(GetObject(, “Excel.Application”))
- IDで指定したコマンド(『すべてクリア』コマンドのID:ClearAll)を実行(CommandBars.ExecuteMsoメソッド)
といった処理をたった1行のコードで行っています。
ただし、Excelが複数起動した状態では、対象となるExcelでコマンドが実行されるかどうかは不確実であるため、その場合は下記コードのようにExcelファイルのパスを指定することで安定して処理を行うことができます。
GetObject("C:\Test\SampleBook.xlsx").Application.CommandBars.ExecuteMso "ClearAll"
※上記コードではGetObject関数の第1引数でファイルパスを指定することでWorkbookオブジェクトを取得し、Applicationプロパティから取得したExcel.Applicationオブジェクト経由でコマンドを実行しています。
コマンドIDの取得方法
ExecuteMsoメソッドで指定するコマンドID(コントロールID)を取得する最も簡単な方法は“クイック アクセス ツール バーのカスタマイズ画面でポップアップヒントを見る”ことです。
ただしIDを手入力することになるので、Microsoftが公開しているリスト(Excelファイル)からコピーした方が確実です。
クイック アクセス ツール バーのカスタマイズと上記リスト、両方を参照することをオススメします。
上記の通り、今回の記事ではIDを指定して任意のExcelのコマンドを実行するスクリプトを紹介しました。
VBAやVBScriptに詳しい人であれば、すべての処理をマクロやスクリプトで書くことも容易ですが、ローコードサービスであるPADの特性を活かすことを考えるのであれば、標準で用意されていない部分のみをスクリプトで処理することによって、将来的にその処理がアクションとして実装された際、簡単に処理を置き換えられるメリットがあります。
標準機能とスクリプトを上手く組み合わせることで、可読性が高く安定したフローを作れるようになるかと思います。
この記事へのコメントはありません。