InvokeVBAのすゝめ


それ、マクロでよくね?

こちらの投稿で、2019年のRPA流行語大賞に選ばれた

それ、マクロでよくね?

現場でRPA開発をしていると確かにこの言葉がよく出ます。特に他人が作ったロボを保守していて、わざわざロボットで組まないでいいような処理を強引にUI操作で実現しているような目も当てられないポンコツの前では、この言葉が罵詈雑言となって出てくる。
私個人としては、「マクロでやるべきもの、UI操作でやるべきものを正しく切り分ける」ことが大事だと考える。
しかし、厳密にこれはマクロ、あれはUI操作、と明確な判断基準がないので何とも言えないが、今日は明らかにマクロで実装したほうが良いものを(よかったもの)を2つ紹介する

シートの削除

仮にシートの削除をUI操作で実装しようとした場合、RPAツールでは
 1. 削除対象のシートを右クリック
 2. 「削除(D)」をクリック
 3. このシートは完全に削除されます~~で「はい」をクリック
という3ステップを踏む必要がある。一般的にRPAツールでは画面描写のタイミングによってうまくクリックできなかったり、対象のエクセルが重すぎて削除に時間がかかって後続の処理がうまくいかなかったりと、UI操作には一定不安定要素が残る。

しかし、これをマクロ(InvokeVBA)で実装した場合は以下になる


Sub deleteSheet()
    Application.DisplayAlerts = False
    sheet([対象シート]).Detele
    Application.DisplayAlerts = True
End Sub

グループ化の解除

これはさっきのシート削除と比べると、絶対にVBAで実装したほうがいいレベルの処理。たとえば、グループ化を解除したいときは、コレをクリックする必要があるが、そもそもこれが何行目に存在するのか、デフォルト表示なのか非表示なのか…という具合に、RPA化する上での罠がてんこ盛り。

ただこれをVBAで書くと

Sub グループ化解除()
    On Error GoTo ERR
    sheet([対象シート]).rows.Ungroup
ERR:
End Sub

はいおしまい。たったこれだけで確実にグループ化を解除する処理が組める(グループ化する処理も同様)

VBA活用によって得られる利点

安定性の向上

不安定要素を孕むUI操作よりも一般的に安定稼働する

可読性の向上

UI操作だけでは、何を実現したいのか直感的に理解しづらい点があるがコードであれば直感的に理解が可能