「VBA を呼び出し」アクティビティで作ったもの(現在MarketPlace審査中)

## 皆もすなるQiitaといふものを、儂もしてみむとてするなり。

と言う訳で、こん＊＊は！はなっち！です。

★★★この記事はUiPathブログ発信チャレンジ2021サマー、7月31目の記事です。★★★

###「VBA を呼び出し」アクティビティで作ったもの
今回、UiPathとVBAの連携をまとめてきたのには、理由があります。無論、ナレッジとしてお披露目する事ではあるのですが、現場開発でちょいとした問題が発生し、その解決に「VBA を呼び出し」アクティビティを使うシーンがあったからでした。

####問題点
・固定シート名を処理対象にする仕様であったが、現場からのファイルは、固定シート名をコピーし、そのコピーシートに情報を記載してある。その際、固定シート名を非表示にしていた。
・ファイル上、選択する文言が並列に記載されていて、その文言上に図形の「楕円」を描画する運用となっていた。

無論、標準のアクティビティ群では解決することができず、[UiPath MarketPlace上の「かんたん Excel アクティビティパック」](https://marketplace.uipath.com/ja/listings/easy-excel-activity-pack)を頼ったのですが存在せず…

已む無く個々ロボットに「VBA を呼び出し」アクティビティを実装していたたのですが、こりゃもうちょっと纏めていった方がいいねと言うことになったのでした。

###はなっち！のEXCELアクティビティパック
現在、審査中のアクティビティと機能を以下に記します。

|シート||
|-|-|
|アドレスの取得|指定行、指定列のレンジアドレス取得|
|シートのフィルタのみ設定|指定範囲にオートフィルタのみ設定|
|シートのフィルタの解除|シート上のオートフィルタ解除|
|シートを非表示化|表示シートの非表示化|
|シートを表示化|非表示シートの表示化|
|シート活性化(シート番号指定)|シート番号によるシートの活性化|
|シート活性化(シート名指定)|シート名によるシートの活性化|
|シート見出しの色解除|シート見出しの色の解除|
|シート見出しの色設定|シート見出しの色の設定|
|シート削除(Sheet1~全て)|“Sheet”で始まるシートの全削除|
|シート背景の解除|シート背景の解除|
|シート背景の設定|シート背景の設定|
|ホームポジション|カーソルを”A1”に設定|
|ユーザーレンジの範囲取得|シートのユーザーレンジアドレスの取得|
|指定ポジション|カーソルを指定アドレスに設定|
|全シートをホームポジション|全シートのカーソルを”A1”に設定|
|全シートを指定ポジション|全シートのカーソルを指定アドレスに設定|
|範囲の選択|指定範囲を活性化|

|シート > 一覧||
|-|-|
|グラフシートの一覧(全て)|全グラフシート一覧を取得|
|グラフシートの一覧(非表示)|非表示グラフシート一覧を取得|
|グラフシートの一覧(表示)|表示グラフシート一覧を取得|
|シートの一覧(全て)|全ての種類のシート一覧を取得|
|シートの一覧(非表示)|全ての種類の非表示シート一覧を取得|
|シートの一覧(表示)|全ての種類の表示シート一覧を取得|
|マクロシートの一覧(全て)|全マクロシート一覧を取得|
|マクロシートの一覧(非表示)|非表示マクロシート一覧を取得|
|マクロシートの一覧(表示)|表示マクロシート一覧を取得|
|ワークシートの一覧(全て)|全ワークシート一覧を取得|
|ワークシートの一覧(非表示)|非表示ワークシート一覧を取得|
|ワークシートの一覧(表示)|表示ワークシート一覧を取得|

|描画||
|-|-|
|セルアドレスに図形左上有無|指定範囲上に図形の左上点が存在するか|
|セルアドレスに図形中央有無|指定範囲上に図形の中点が存在するか|
|図形左上のセルアドレス取得|指定図形の左上点のアドレス取得|
|図形左上のセル値取得|指定図形の左上点のセルの値取得|
|図形中央のセルアドレス取得|指定図形の中点のアドレス取得|
|図形中央のセル値取得|指定図形の中点のセルの値取得|

|描画 > 操作||
|-|-|
|図形のプロパティ設定|指定図形のセル移動時の挙動の設定|
|図形の削除|指定図形の削除|
|図形の全削除|シート上の全図形の削除|
|規定の図形に設定|指定図形を既定の修飾として設定|
|標準の図形に設定|指定図形を標準的な修飾に再設定|

|描画 > 操作 > 図形||
|-|-|
|図形の挿入|左,上,幅,高さを指定して図形挿入|
|図形の挿入_セル短辺|範囲矩形の短辺を幅,高さとした図形挿入|
|図形の挿入_セル長辺|範囲矩形の長辺を幅,高さとした図形挿入|
|図形の挿入_セル内接|範囲矩形に内接する図形挿入|

|描画 > 操作 > コネクタ||
|-|-|
|コネクタの挿入|左,上,幅,高さを指定してコネクタ挿入|
|コネクタの挿入_セル内接|範囲矩形に内接するコネクタ挿入|
|コネクタの変更|コネクタ線種を変更|
|コネクタの矢印始点|コネクタの始点矢印の修飾|
|コネクタの矢印終点|コネクタの終点矢印の修飾|

|描画 > 修飾||
|-|-|
|図形の塗りつぶし設定|指定図形の塗りつぶし色の設定|
|図形の塗りつぶし透明度設定|指定図形の塗りつぶし色の透明度設定|
|図形の塗りつぶし非表示|指定図形の塗りつぶしの非表示|
|図形の塗りつぶし表示|指定図形の塗りつぶしの再表示|
|図形の枠線種設定|指定図形の枠線の線種の設定|
|図形の枠線色設定|指定図形の枠線の色の設定|
|図形の枠線太さ設定|指定図形の枠線の太さの設定|
|図形の枠線透明度設定|指定図形の枠線の色の透明度設定|
|図形の枠線非表示|指定図形の枠線の非表示|
|図形の枠線表示|指定図形の枠線の再表示|

|描画 > 回転||
|-|-|
|図形の右へ 90 度|指定画像の右 90 度回転|
|図形の左へ 90 度|指定画像の左 90 度回転|
|図形の左右反転|指定画像の左右反転|
|図形の指定角度回転|指定画像の指定角度回転|
|図形の上下反転|指定画像の上下反転|

|描画 > 情報||
|-|-|
|図形の一覧(全て)|シート上の全ての種類の図形一覧を取得|
|図形の一覧|シート上のコネクタ以外の図形一覧を取得|
|図形の一覧(コネクタ)|シート上のコネクタ図形一覧を取得|
|図形の情報(サイズ)|指定図形の左,上,幅,高さ,回転情報を取得|
|図形の情報(色線)|指定図形の塗りつぶし、線の情報を取得|

上記問題点に関しての解決アクティビティは、以下のアクティビティです。
「シートの一覧(表示)」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/25417794-a803-de5a-9285-7031de817390.png)

「図形中央のセル値取得」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/b4ae4ce4-5008-cedd-b6b7-b2d99609d6c9.png)


###解決アクティビティから発展したもの
####「シートの一覧(表示)」 
EXCELで言う「シート」には、「ワークシート」「グラフシート」「マクロシート」の３ツがあります。会話の中で出てくる「シート名」は、厳密に言うと「ワークシート名」ですね。
この「シートの一覧(表示)」から発展したものは、「グラフシートの一覧(表示)」、「マクロシートの一覧(表示)」、「ワークシートの一覧(表示)」ですね。実用性は低いのですが、EXCELに存在するのだったら、作成しておこうという考えです。

####「図形中央のセル値取得」
EXCELで楕円を描画するのには、上、左、幅、高さの情報が必要です。その情報を取得すると、楕円の中心点が計算できますね。その中心点が、EXCELのセルの上、左、幅、高さで表される矩形の内側にあれば該当セルが取得でき、それが出来れば、アドレスも取得できる訳です。これが「図形中央のセルアドレス取得」です。このアドレスを取得する事で「セルへ書込み」アクティビティを使って、書き換える事も出来ます。
更に、図形の中央が得られるのだったら、図形の四隅の情報も得られるのですが、図形描画の基点となる上、左、つまり左上の点の情報でアクティビティを！と思ったので、「図形左上のセル値取得」、「図形左上のセルアドレス取得」を作成しました。

###ちょっと面白いアクティビティ
####「全シートをホームポジション」
色々とEXCELに対して操作していると、カーソル位置がまちまちとなって、次に開いたときにカーソルがどこにあるのかが瞬時に判断付かない場合がありますね。このアクティビティは、すべてのシート上のカーソルを、シートの左上、つまり"A1"セルにポジショニングするものです。
####「シート削除(Sheet1~全て)」
新規にEXCELファイルを作成した場合、意味なく「Sheet1」「Sheet2」「Sheet3」が出来てしまいますね。無論EXCELのオプション設定で、「Sheet1」１枚だけにすることは可能です。この設定を、ROBOT側ユーザにすべて確認、設定させるより、ロボット側で「Sheet」で始まるシートは消してしまうアクティビティです。無論、処理に必要なシートは、別の名前にしなければなりませんが…

##おわりに
いかがでした？

「はなっち！のEXCELアクティビティパック」、結構作りためていたものを審査中ではありますが、ここでお披露目出来て、ちょっとホッとしています。
お読みの皆様から、こんな事できない？あれは使いにくいねなど、コメントを頂けたらと思いますが、公開されるかどうかも不明です。ま、気長にお待ちください。公開の折には、補記として情報追加していこうと思います。


是非UiPathでのロボ開発の一助になればと思っています。

ありがとうございました！