はじめに
この投稿は、RPAツール「UiPath」の データテーブル について「個人的に」まとめたものです。
量が多いので、数回に分けて書きます。
データテーブルの操作 シリーズ
DataTableの操作方法について記載した記事が、他にもあります。参考まで。
DataTable とは
簡単に言えば、「データを表形式で格納する」ものです。

後で説明しますが、UiPath では この「DataTable」が Excel 操作等で多用されるため、概念と使用方法を理解する必要があります。
DataTable の背景と歴史
そもそも DataTable は SQL Server 等のデータにアクセスするための機能 として作成されたクラスで、ADO.NET と呼ばれるライブラリや、VB の中でも利用頻度の高い、重要なクラスとして登場しました。
DataTable は、DataSet の内部にある機能で、概念としては「データを表形式で格納する」ものです。
- DataProvider を使用して、データベース(DataSource)のデータにアクセス
- DataProvider には、DataAdapter というデータの格納・変更用クラスがある
- DataAdapter は DataSet でデータを保持している
- DataSet には、DataTables というコレクションがあり、内部に DataTable がある
- DataTable は DataRow と DataColumn で構成される
- DataTable には DataView というデータフィルタ(加工機能)がある
表で整理すると、以下のようになります。
| 用語 | 何を表すもの? | 言葉で言えば? |
|---|---|---|
| DataSet | データ ベース | 色々な種類のデータが集まった箱 |
| DataTable | データ 表 | ある1種類のデータが集まった表 |
| DataColumn | データ 列 | データの縦列 |
| DataRow | データ 行 | データの横行 |
| DataView | データ フィルタ | データの集計・並び替え |
DataTable の歴史は古く、昔は「データの操作 = DataTable」という位にメジャーでした。
現在では「O/Rマッパー」のような便利ツールが主流で、以前のようには多用されませんが、DataTable の「データ定義が簡単に出来て、自由にデータを格納できる」という機能は素晴らしく、特に RPA などの「エクセルに書かれた縦横の表データ」を扱う場合には、非常に便利です。
DataSet・DataProvider・DataAdapter は、UiPathでは覚えなくて大丈夫です(意識する必要はありません。)
UiPath での DataTable
RPAツールの UiPath では、DataTable は Dictionary と並び「多用される型ランキングのTOP5」に入ります。その「機能の豊富」さと「使用頻度の高さ」から、「DataTable を制する者は UiPath を制する」と言っても過言ではありません。(逆に、DataTable の操作に不安があると、UiPath で困るシーンが増える とも言える)
例えば、以下のように「読み込んだデータの格納先」として使用されます。

また、Excelへの書き込み(書き戻し)データとしても使用できます。
Excelを使わない場合でも、処理中のデータを格納する用途にも利用できます。要するに「便利な箱・処理データベース」として、幅広く使用できるのです。
Excel シートからデータを読み取るときの注意
たまにあるのですが、読み込みたい Excel 表の「列名」が重複していることがあります。

UiPath の「範囲を読み込み」アクティビティで表を取得したいところですが、DataTable の列名は、ユニーク(重複はNG)にする必要があるため、この場合、列名をヘッダーから読み込むことが出来ません。この場合、以下のいずれかの対応をします。
1)Excelシート上の列名を変えてもらう
※ 列名は変えたくない(変える労力が大きすぎる)場合は諦めて「2」へ
2)いったん「ヘッダーなし」で読み込んでから、列名を自分で設定して回避
3)ヘッダー以外のデータ範囲を指定読み込みしてから、列名を自分で設定する
「ヘッダーなし」で読み込む場合、以下のオプションのチェックを外します。

ヘッダーなしで読み込むと、データテーブルの列名は「Column1」のように設定されているので、妥当な名前に自分で変えていくイメージです。列名の設定方法は、この後の「列定義」の話で説明します。
DataTable の列定義
DataTable は「列の定義」を自由に作成・変更できます。
新規作成時なら、標準アクティビティの「データ テーブルを構築」で対応可能です。

ですが、定義の内容が [データテーブル...] ボタンを押さないと見えないのと、列を3個以上にすると、横スクロールが発生して分かりにくい のが残念です。
以下のように「データ列を追加」アクティビティでも追加できますが「1列をづつ足していく」ので、列が多いと面倒です。

以下のように「InvokeCode で 1列づつ定義を足していく」ことも出来ますが、同じく、列が多いと面倒です。

こういう時は「InvokeCode」アクティビティで書くと、楽で見やすくなります。

.Columns.Add("列名") または .Columns.Add("列名", データの型) で列追加します。あとで合算などの計算をしたい場合は「型」を指定しておくと便利です。(計算時などに別途、数値型に変換しなくて済む)
型は Type.GetType("System.{型名}") で指定できます。
指定可能な型名は、以下の公式ドキュメントに一覧があります。
ちなみに「列名変更」は .Columns(列インデックス値).ColumnName で変更できます。

複数ある場合は、定義作成時と同じ要領で「InvokeCode」アクティビティで書くと、見やすくなります。

DataTable を生成しておきたい
頻度は少ないですが、データテーブルを生成しておきたい時があります。
(例:If 分岐で DataTableが作られないことがあるが、後続の処理で「.rowCount」で件数を確認したい)
その場合は、以下のように初期化・生成します。
New DataTable() のカッコの中に識別用の「データテーブル名」を指定することも出来ますが、UiPathでは使用することはありません。(そもそも変数名で区別出来るようにすべき)
InvokeCode で実施するなら
dt = New DataTable()
と書いておきます。Studioの変数パネルの「規定値」で初期化しても同じです。
DataTable の中身を消して、空にしたい
消去の方法は2つあります。通常は「Clear」でデータだけを消します。
Resetにすると列定義も消えます(Resetを使うケースは、ほぼ無いです)
| メソッド | 内容 |
|---|---|
| .Clear | DataTable からすべてのデータを消去(列の定義はそのまま) |
| .Reset | DataTable からすべてのデータ・定義を消去(まっさらに初期化) |
DataTable をコピーしたい(別の名前で同じのが欲しい)
別オブジェクトとして複製を作成します。
中身=データを残して複製する場合は「.Copy」です。
| メソッド | 内容 |
|---|---|
| .Copy | DataTable の構造と値をコピー |
| .Clone | DataTable の構造だけをコピー(中身は無し) |
DataTable の中身にアクセス
DataTable内のデータにアクセスるする際は、行番号、列番号/列名を指定します。

「繰り返し (データ テーブルの各行)」アクティビティで、行ループしながらアクセスする場合は、列番号/列名を指定します
「row.Item("列名")」も「row("列名")」も同じです。以下のように「好み」で変えても問題ありません。
A)文字数を減らしたい ⇒ 「.Item」を付けない
B)列名の指定内容を見やすくしたい ⇒ 「.Item」を付ける
UiPath で提供されているアクティビティ
データテーブル関連で、UiPath に標準で用意されているアクティビティ は以下です。
(2022年5月時点。UiPath.System.Activities は 「22.4.1」で確認)
| No | 名称 | 説明 |
|---|---|---|
| 1 | データ テーブルをクリア (Clear Data Table) |
全てのデータをクリアします |
| 2 | データ テーブルをフィルター (Filter Data Table) |
条件を指定してデータをフィルターします |
| 3 | データ テーブルをマージ (Merge Data Table) |
データテーブルを結合します。 |
| 4 | データ テーブルを並べ替え (Sort Data Table) |
データを降順または昇順に並べ替えます。 |
| 5 | データ テーブルを出力 (Output Data Table) |
CSV 形式の文字列として出力します。 |
| 6 | データ テーブルを検索 (Lookup Data Table) |
指定の値を検索し、見つかったセルの行インデックスを返します。 |
| 7 | データ テーブルを構築 (Build Data Table) |
指定したスキーマに従ってデータ テーブルを構築します。 |
| 8 | データ テーブルを結合 (Join Data Tables) |
共通の値を使用し、データを結合します。 |
| 9 | データ列を削除 (Remove Data Column) |
データ列を削除します。 |
| 10 | データ列を追加 (Add Data Column) |
データ列を追加します。 |
| 11 | データ行を削除 (Remove Data Row) |
指定したデータ テーブルからデータ行を削除します。 |
| 12 | データ行を追加 Add Data Row |
データ行を追加します。 |
| 13 | テキストからデータ テーブルを生成 (Generate Data Table) |
構造化テキストからデータ テーブルを生成します。 |
| 14 | 繰り返し (データ テーブルの各行) (For Each Row) |
データテーブルの各行に対してアクションを 1 回実行します。 |
終わりに
今回は、データテーブルの「基本知識」について書きました。次回以降は、具体的な操作方法を説明していきます。
この記事が参考になったら、 LGTMをお願いします。閲覧ありがとうございました。


