StudioXでexcelのセルを結合をしてみる（ぱっと見専用アクティビティがなさげな場合の対応）

# 目次

1. はじめに
2. UiPathのStudioXとは
3. エクセルのセルを結合する方法
4. StudioXでのワークフロー作成手順
5. おわりに

# 1. はじめに

開発者の方でなくても自動化を実現できるということで提供されているStudioXですが、業務使用しているとちょっとしたことで実現する際に躓くことはないでしょうか？今回は実際に業務の中でも質問を受けたことがあるエクセルのセルの結合を例にとって、日常業務を自動化する際に拡張できるポイントについて考えてみたいと思います。

# 2. UiPathのStudioXとは

こちらの記事を読まれる方の中にはStudioXに馴染みのない方もいらっしゃるかも知れませんので、簡単に説明しておきます。
UiPathのStudioXは、RPA(Robotic Process Automation)のツールの1つであり、開発者の方でなくても使いやすい機能が豊富に揃っています。ノーコードでアクティビティというコンピューターへの命令を意味するボックスを、ドラッグアンドドロップで配置していくことで、自動化の実現ができます。

https://www.uipath.com/ja/product/studiox

# 3. エクセルのセルを結合する方法

今回実現しようとしている内容は以下になります。（D列とE列を結合して、表1の状態から表2の状態にする）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/c2749147-5f12-fd4f-f32a-6ffa2603f5a1.png)

結論からお伝えすると、エクセルのセルを結合するには、以下の手順を実行します。

1. プロジェクトワークブックに最終的に編集したいセルの状態を、コピー元のテンプレートとして作成しておく。（今回で言えばセルの結合結果を作成しておきます。）
2. 編集先のファイルに対して、列の挿入や行の挿入などのアクティビティを使い編集前の状態を整える。
3. 範囲をコピーを使って1.で作成しておいたテンプレートを編集先のファイルにコピーする。

一見、アクティビティの一覧を見ていると、セルの結合に該当するアクティビティがないな思いますが、StudioXではプロジェクトワークブック（普通のエクセルファイルでも可能です。）を利用することで、いろいろな編集をコピーして実現することができます。また、「範囲をコピー」アクティビティでは、コピーする内容も「全て」「値」「計算式」「フォーマット」などを選択することが可能ですので、これらも合わせて考えていただくと、いろいろと適用範囲を拡張することができると思います。

# 4. StudioXでのワークフロー作成手順

StudioXでエクセルのセルを結合するためには、以下の手順を実行します。

Step0 編集先ファイルとプロジェクトワークブックを用意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/753475a1-0cea-4273-5022-6f40ef66505d.png)
中身は以下の通りです。

【編集先ファイル】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/c5c09c3c-e22a-f9e8-76f4-a5be9309f3c1.png)
【プロジェクトワークブック】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/7aa40564-bed4-7ec8-57fb-84d858762eb7.png)


`Step1` StudioXを起動します。
`Step2` 新しいプロジェクトを作成します。
上位のStep1およびStep2は以下のリンク先の手順を参考に実施してください。

https://docs.uipath.com/ja/studiox/standalone/2022.10/user-guide/creating-your-first-automation-project

`Step3` 「Excelファイルを使用」アクティビティを配置して、編集先のファイルを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/dbdefc38-300d-9530-f232-251a361bce45.png)

`Step4` 「列を挿入」アクティビティを配置して、セルを結合したい列を追加します。（今回の例ではE列以降にデータがありませんが、もしある場合にはデータを消してしまうため。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/2e4069b7-d962-f35b-6e75-054ec730c9ba.png)

`Step5` 複数行についてセルを結合したいので、どこからどこまでを処理するか行番号を取得します。*1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/99b3336d-63aa-aad1-b910-d85fcb1f7660.png)

:::note info
*1 最初の行の番号を保存欄と最後の行の番号を保存欄に入力している「セルの結合の最初の行」と「セルの結合の最後の行」は、「後で使用するために保存」（変数）として定義しています。
:::

`Step6` 「Excelファイルを使用」アクティビティを配置して、プロジェクトワークブックを選択します。そして、その中に「範囲をコピー」アクティビティを配置して、ソースにはコピー元となるプロジェクトワークブック内のセルC3:D3を指定し、対象には編集先のファイルについて、D列の最初の行からE列の最後の行を指定します。(今回の例ではD2からE5。)*2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/e4e5c9fe-cd0d-d261-f334-201ff0b5393b.png)

対象の中の設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/7e003788-6f9c-9d05-2632-d76755d8a631.png)
```
編集先ファイル.Sheet("セルの結合").Range(string.Format("D{0}:E{1}", Saved.Values(Of Int32)("セルの結合の最初の行"), Saved.Values(Of Int32)("セルの結合の最後の行")))
```
:::note info
*2Saved.Values(Of Int32)は文字列は数値として扱うために型の変換を実施しています。[参考サイト](https://ameblo.jp/hakomono-robot/entry-12738973222.html)
string.Format("D{0}:E{1}", 変数1 , 変数2)は、"D変数1:E変数2"とした後に、この値全体を文字列として扱うための操作になります。
:::

`Step7` ワークフローを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/67e3d643-71e2-b473-944d-2f557b8ddea2.png)


出来上がりのワークフローはこちらになります。（最後のメッセージボックスは、テスト結果を確認する時に実行後に毎回ファイルを開かずに確認できるようにするために配置しています。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3455661/a5c5a4d0-0281-39fd-8b46-276cadcfd856.png)


# 5. まとめ

いかがだったでしょうか。今回はStudioXでセルを結合する自動化を扱い、他のエクセル作業にも応用できる考え方について記載してみました。
全て専用アクティビティを使うという発想から、プロジェクトワークブックを事前にテンプレートとして使っておいてコピーするという発想に変えることで、エクセルの編集領域が大きく広がると思います。是非ご参考にしていただき、実業務にて適用していただけると幸いです。