【UiPath】プロジェクトノートブックの使い方【StudioX】

## はじめに
### この記事の執筆環境
この記事の執筆は以下の環境で行っています。
Studio 2025.0.157（Community License）
言語：日本語
### この記事は
UiPath Adventカレンダーの15日目の記事になります。

https://qiita.com/advent-calendar/2024/uipath

### なにをするの？
UiPath StudioXの一番の特徴である、プロジェクトノートブックの使い方について、基本と応用について紹介します。

## プロジェクトノートブックの使い方
### プロジェクトノートブックとは
StudioXで新しくタスクを作成した際に、自動で生成されるExcelファイルです。
プログラミングの知識(≒.netの関数)がなくとも、Excelの知識ぐらいあるでしょう？と、言う暗黙の圧力のもと、値の型変換、日付の操作、文字列抽出など便利な機能がExcel関数として実装されています。

特に文字列抽出については、特定のキーワードを元に値を抽出することができる関数が入っており、メール本文内からルールベースで受発注情報やファイル解凍パスワードを抽出するという、アクティビティだけでは実現困難なことが可能になります。（以下リンク先の項番2を参照）

https://docs.uipath.com/ja/studiox/standalone/2024.10/user-guide/tutorial-extracting-data-from-automated-emails-moving-it-to-a-desktop-application

:::note warn
プロジェクトノートブックはタスクに紐付いて生成されるため、使用時に「Excelファイルを使用」で定義する必要がありません。その代わり、パブリッシュの際にxamlファイルと共に圧縮されるため、変更した際は都度プロジェクトをパブリッシュする必要があります。
:::
### 関数は増やせる
使いたい処理をしてくれる関数がプロジェクトノートブック上に無ければ、追加することもできます。
慣れない方は既存の関数を参考に、処理を作ってみるところからチャレンジしてみると良いでしょう。

例えば、保存するファイルにタイムスタンプを付けたい処理を想定してみましょう。
YYYYMMDDの情報はありますが、時間まで付与しようとすると、hhmmssの情報がありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/56ba834a-f87f-4aca-faa4-0e28ebae7241.png)

こんな時は、自分で関数を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/e888f286-ead9-552e-0d26-9dcd15fa2a31.png)
- 日時の行を追加してNow関数を入力
- 日付形式(hhmmss)の行を追加して、TEXT関数で時間の部分を抽出

### 名前を付けよう
新しい関数を付け加えても、そのままでは＋ボタンを押した先に出てきません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/c32a4d55-3f53-527e-48a7-d7d30755582c.png)
一覧に表示するためには、Excelのセルに名前を付ける必要があります。
試しに、先程設定したB5セルとB12セルにそれぞれ「日時」「HHMMSS」と名前を付けてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/72a721d6-bf54-0cdc-609f-8aa4e3602d30.png)
名前を付けた後にファイルの上書き保存を行うことで、＋ボタンを押した先に反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/86dc9ad5-ff6c-4f13-af91-6d307b207768.png)

また、B12セルに入力された数式の変化には気付きましたでしょうか？
この**セルに名前を付ける**という機能、元々は関数の可読性を上げるためExcelに備わっている機能です。
予め名前を付けておいたり、付けた後に関数の中でセルの選択を行うことで可読性を上げたり、セルの場所が変わっても同じ場所を参照することが可能になります。
名前付けを間違ってしまった際は以下の場所から編集可能となっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/3bf24e95-3f6c-d70c-7ac8-81a1f9deb219.png)
数式タブ＞名前の管理

### 応用（テーブルや範囲に名前を付けて活用する）
少し複雑なことをやってみましょう。
**ある文章の中に、特定のワードが入っている時だけ処理を分岐させたい**
こういったケース、込み入ったロジックのロボを作っていると遭遇しがちです。
通常であれば、条件ビルダーで「次の値を含む」で分岐を作ることで対処しますが、
もし、**特定ワードが複数あって、しかも定期的にメンテが必要**だとしたら。
条件分岐が入れ子になって可読性が落ちたり、メンテの仕組みも考えるのが大変です。

#### ワークフローをシンプルに
こんな時、StudioXならプロジェクトノートブックに判定用のシートを追加することで、ワークフローの内容をシンプルにすることが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/075d26a0-c9fe-ee6f-8368-a49004e4f6c6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/5c0611cd-9f70-f7ab-5d96-3bf50c38d724.png)

:::note warn
関数の紹介：
例示した結果を使用するには、
スピル機能が実装されたバージョンのExcelが必要です。
=IF(COUNT(FIND(判定ワードテーブル[判定ワード],判定用文章)),"含む","含まない")
また、FINDの検索範囲に空白セルがあると誤判定となるので注意してください。
:::

- FIND関数の検索文字列に範囲を設定することで、結果が範囲に定義された分だけスピルされて返ってきます
- スピルされた結果をCOUNT関数でチェックすることで、判定ワードが見つかった個数を数えることができます
- IF関数は論理式の返り値が0ならFalse、その他はTrueになります
- 判定ワードの一覧にある語が1つ以上文章の中に見つかったら「含む」、なければ「含まない」を返してくれます
#### メンテの仕組み
ワークフローがシンプルになったので、次はメンテの仕組みも考えます。
StudioXでは＋ボタンからテーブルも呼び出すことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/344d6128-d63d-acd6-c316-16a2bd5ee038.png)
以下のようにプロジェクトノートブック上のテーブル内容を削除し、別ファイルのテーブルからデータを反映させる処理を作ることで、検索ワード一覧のメンテも別ファイルを編集するだけの簡単実装になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/a12b8347-5653-e2c3-9c47-9dca15d4de9a.png)
すべての範囲がテーブルとしてExcel上で定義されているので、削除やコピーの際に範囲の特定が不要となっている点がポイントです。
上記のワークフローを実行し、プロジェクトノートブック上のテーブルが、別ファイルの内容に更新された様子
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545766/f3c2cf64-76ef-0dad-85d8-4cf347f0bef2.png)

## さいごに
StudioXも仕様がどんどん変わり、Studioとできることが変わらなくなってきました。
それでも、プロジェクトノートブックを使いこなすことでコーディングの要素を無くし、市民開発者にとっての保守の敷居を下げる効果は健在です。

ツールとしての変遷は色々とありますが、これからも市民開発者向けのツールでいて欲しいStudoXですね。

【参考】変遷について

https://qiita.com/Kajiita/items/72b04865dcabafa34e69

https://x.com/mh_ti_fu/status/1868125792582107346