【UiPath】Excel特定範囲のデータ取得について

# はじめに
ロボでExcelデータを取得する際、DataTableを利用する機会が多いです。
データ取得する範囲がまとまっている場合、データ取得は容易ですが、形式によっては取得行に対して列名の重複やロボで処理しなくてもよい行がはいっているケースがあります。
今回は特定範囲のデータ取得方法をナレッジとして残します。

# この記事の対象者
- UiPath初学者
- 特定範囲のデータテーブル取得方法について考えたい方

# 目次
1. 開発環境紹介
1. 処理要件確認
1. 実装
1. 解説


# 開発環境紹介
- OS：Windows11
- 開発ツール：UiPath Studio
- バージョン：2023.10.0
- ライセンス：Community License
- モダン デザイン エクスペリエンス：いいえ
- Microsoft Excel：2310

:::note warn
- 本投稿の開発環境になっております
- バージョンによっては画面が一部異なる可能性はございます
:::

### UiPath 依存関係
| パッケージ名 | バージョン |
|:--|:--|
| UiPath.Excel.Activities | 2.22.2 |
| UiPath.Mail.Activities | 1.21.1 |
| UiPath.System.Activities | 23.10.2 |
| UiPath.Testing.Activities | 23.10.0 |
| UiPath.UIAutomation.Activities | 23.10.3 |

# 処理要件確認
- 指定した範囲のデータテーブルのみを抽出する
- データ取得範囲はA列~I列のみとする

## Config.xlsx
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/1528bce8-8f78-cd1e-fa2f-a12f0d89d1e1.png)

## サンプルデータ(連絡先取得台帳.xlsx)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/b6dd0d17-a64e-b6a8-c283-9c8953785831.png)

## データ取得範囲
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/9bbf111b-c426-9c83-6b0d-adae5e97b251.png)

:::note warn
テストデータに関して、[個人情報テストデータジェネレーター](https://testdata.userlocal.jp/)を利用して作成しています。
:::

# 実装
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/3e9c4acc-4dfd-96b1-a898-667fc898066f.png)

### 変数情報
| 名前 | 変数の型 | スコープ | 規定 | 注釈 |
|:--|:--|:--|:--|:--|
| dtSelectFileAll | DataTable | GetRangeDtSelectFile | | 全行から取得したデータテーブル　|
| dtGetRowCount | Int32 | GetRangeDtSelectFile | | 全行から取得した行数　|

### 引数情報
| 名前 | 方向 | 引数の型 | 規定値 | 補足 | 注釈 |
|:--|:--|:--|:--|:--|:--|
| in_Config | 入力 | Dictionary<String,String> |  |  | Config情報 |
| in_SheetName | 入力 | String |  |  | シート名 |
| out_DtSelectFile | 出力 | DataTable |  |  | 処理対象ファイルのデータテーブル |
| io_WbResultFile | 入力/出力 | WorkbookApplication |  | UiPath.Excel.WorkbookApplication | 処理対象ファイルのワークブック |



# 解説
データテーブルを取得する場合、範囲取得を行う必要がある。
今回のケースの場合、5行目を軸に範囲取得を行えればよいのだが、5行目には「処理結果」が2個あるため列名の重複でデータテーブル取得ができません。そのため、下記の工程で指定範囲を取得するようにします。
1.5行目を軸にヘッダー追加を行わずデータテーブルを取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/a94e888c-556b-e0d9-d18f-c2a2a2e9c8b1.png)
2.行数を取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/51bc903d-7f4a-034a-aedd-1394ae325d6d.png)
3.取得した行数をもとに範囲取得を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/6a227e0a-090b-b7b5-3f60-2318d8525abf.png)
4.指定範囲でデータテーブルを取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/aafa50c6-2809-354f-2a8d-52b2c3f4f994.png)


### 実装補足
### データテーブル全範囲取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/59f2364f-efa6-82f2-912f-992dc1a31f18.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/0de33883-ea1c-3b3c-8add-6c1d9c4f7d25.png)
~~~vb:範囲を読み込み：台帳データ取得_全行「範囲」
in_Config("処理リスト_読込セル")
~~~

### データテーブル指定範囲取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/9f273bed-28d4-4672-9e8e-f97dc13b6355.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/92af88fc-c3cc-e5f3-4753-b0e12f9eba7b.png)
~~~vb:範囲を読み込み：台帳データ取得_対象範囲「範囲」
in_Config("列名_No") & in_Config("ヘッダー行") & ":" & in_Config("列名_エラー内容") & dtGetRowCount -1 + Cint(in_Config("ヘッダー行"))
~~~

# おわりに
今回は、データテーブルで指定範囲から取得する方法をまとめました。要件ヒアリング時に列名重複を避けていただければベストですが、業務の都合上で変更できないケースもあります。その際に考えた取得方法となります。他にも指定範囲のデータ取得方法は検討の余地がありますが、今回は解決の一例となります。
本記事で誰かの参考になれば幸いです。

# 参考サイト
[個人情報テストデータジェネレーター](https://testdata.userlocal.jp/)