- データテーブルとは
- テーブルの新規作成 | New DataTable
- テーブルクローン作成 | Clone
- テーブル完全コピー | Copy
- テーブルの行数と列数の取得 | Rows.Count, Columns.Count
- 行の追加 | Rows.Add
- 行の削除 | Rows.Remove
- 行のクリア | Rows.Clear
- インポート行 | ImportRow
- 列の追加 | Columns.Add
- 列の削除 | Columns.Remove
- 列のインデックス取得 | Columns.IndexOf
- データの検索 | Select
- 行の検索 | Rows.Find
- WHERE句によるフィルタリング | AsEnumerable().Where()
- 列挙可能オブジェクトへの変換 | AsEnumerable
- フィルタ結果をテーブルに変換 | CopyToDataTable
- 行の配列への変換 | Rows.ToArray
- テーブルのマージ | Merge
- テーブルの比較 | AsEnumerable().SequenceEqual()
- よくあるエラーと対処法
- まとめ
【保存版】UiPathで使えるデータテーブル操作テクニックを全網羅!Select、Merge、AsEnumerableなど!UiPathやVB.Netで使えるデータテーブル型変数のメソッド完全ガイド

- データテーブルとは
- テーブルの新規作成 | New DataTable
- テーブルクローン作成 | Clone
- テーブル完全コピー | Copy
- テーブルの行数と列数の取得 | Rows.Count, Columns.Count
- 行の追加 | Rows.Add
- 行の削除 | Rows.Remove
- 行のクリア | Rows.Clear
- インポート行 | ImportRow
- 列の追加 | Columns.Add
- 列の削除 | Columns.Remove
- 列のインデックス取得 | Columns.IndexOf
- データの検索 | Select
- 行の検索 | Rows.Find
- WHERE句によるフィルタリング | AsEnumerable().Where()
- 列挙可能オブジェクトへの変換 | AsEnumerable
- フィルタ結果をテーブルに変換 | CopyToDataTable
- 行の配列への変換 | Rows.ToArray
- テーブルのマージ | Merge
- テーブルの比較 | AsEnumerable().SequenceEqual()
- よくあるエラーと対処法
- まとめ
データテーブルとは
UiPathでのRPA開発において、データテーブルは重要な変数です。
ExcelやCSVからデータを取り込んだり、データベースから情報を抽出したりする際に使用します。
本記事ではデータテーブルで使える主要なメソッドを、初心者にも分かりやすく解説します。
ID | 名前 | 年齢 |
---|---|---|
1 | 田中太郎 | 32 |
2 | 山田次郎 | 55 |
3 | 佐藤花子 | 26 |
4 | 鈴木一郎 | 23 |

それではデータテーブルのメソッドについて解説します
テーブルの新規作成 | New DataTable
新しい空のデータテーブルを作成します。
構成:New DataTable([テーブル名])
データTable型の変数を初期化する際に使用します。テーブル名は省略可能です。
この時点ではまだ列も行も存在しない空のテーブルが作成されます。
使用例:
New DataTable("顧客情報") → 空の「顧客情報」という名前のデータテーブル
テーブルクローン作成 | Clone
既存テーブル構造のみをコピーした、新しいテーブルを作成します。
テーブル内のデータは引き継がれません。
構成:DataTable.Clone()
元のテーブルと同じ列構造を持つ新しい空のテーブルを作成します。データはコピーされず、列の定義のみがコピーされます。
使用例:
dtSource.Clone() → dtSourceと同じ列構造を持つ空のデータテーブル
Before/After:
Before (dtSource): | After (Clone結果): | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
元テーブルに設定されている制約やリレーションもコピーされます。
テーブル完全コピー | Copy
既存テーブルを完全にコピーした、新しいテーブルを作成します。
構成:DataTable.Copy()
元のテーブルと同じ列構造とデータを持つ新しいテーブルを作成します。
構造とデータの両方が完全にコピーされるため、元のテーブルに影響を与えずに操作できます。
使用例:
dtSource.Copy() → dtSourceと同じ列構造とデータを持つ新しいデータテーブル
Before/After:
Before (dtSource): | After (Copy結果): | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
テーブルの行数と列数の取得 | Rows.Count, Columns.Count
テーブルの行数または列数を取得します。
構成:DataTable.Rows.Count
DataTable.Columns.Count
Rows.Countはテーブルに含まれる行の数を、Columns.Countは列の数を返します。
データの処理前にテーブルのサイズを確認する際によく使われます。
使用例:
dtCustomers.Rows.Count → 5 (テーブルに5行のデータがある場合)
dtCustomers.Columns.Count → 3 (テーブルに3列ある場合)
行の追加 | Rows.Add
データテーブルに新しい行を追加します。
構成:DataTable.Rows.Add(値1, 値2, ...)
テーブルの列順に従って値を指定し、新しい行を追加します。
値の数は列数と一致している必要があります。
値を指定せず、空の行を追加することも可能です。
追加する値のデータ型は、対応する列のデータ型と互換性がある必要があります。
使用例:
dtCustomers.Rows.Add(3, "田中", 28) → 新しい行として「3, 田中, 28」を追加
dtCustomers.Rows.Add() → 空の行を追加
Before/After:
Before: | After: | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
行の削除 | Rows.Remove
指定した行をデータテーブルから削除します。
構成:DataTable.Rows.Remove(DataRow)
削除したい行(DataRow)を指定して、テーブルから削除します。
削除対象の行がテーブルに存在しない場合、エラーが発生します。
使用例:
dtCustomers.Rows.Remove(dtCustomers.Rows(0)) → テーブルの最初の行を削除
Before/After:
Before: | After: | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
行のクリア | Rows.Clear
データテーブルからすべての行を削除します。
構成:DataTable.Rows.Clear()
テーブル内のすべての行データを削除します。テーブルの列構造は維持されます。
使用例:
dtCustomers.Rows.Clear() → すべての行データを削除(列構造は維持)
Before/After:
Before: | After: | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
インポート行 | ImportRow
別のテーブルから行をインポートします。
構成:DataTable.ImportRow(DataRow)
別のテーブルの行(DataRow)を現在のテーブルにインポートします。列構造が一致している必要があります。
列名は一致している必要がありますが、列の順序は異なっていても問題ありません。
使用例:
dtTarget.ImportRow(dtSource.Rows(0)) → dtSourceの最初の行をdtTargetにインポート
Before/After:
dtSource(インポート元): | dtTarget (Before): | dtTarget (After): | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
列の追加 | Columns.Add
データテーブルに新しい列を追加します。
構成:DataTable.Columns.Add(列名, [データ型])
列名とデータ型を指定して、テーブルに新しい列を追加します。
データ型は省略可能で、省略した場合はString型になります。
使用例:
dtCustomers.Columns.Add("住所", GetType(String)) → String型の「住所」列を追加
dtCustomers.Columns.Add("年収", GetType(Decimal)) → Decimal型の「年収」列を追加
Before/After:
Before: | After: | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
列の削除 | Columns.Remove
指定した列をデータテーブルから削除します。
構成:DataTable.Columns.Remove(列名)
テーブルから指定した名前の列を削除します。
削除対象の列がテーブルに存在しない場合、エラーが発生します。
使用例:
dtCustomers.Columns.Remove("年齢") → 「年齢」列を削除
Before/After:
Before: | After: | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
列のインデックス取得 | Columns.IndexOf
指定した列名のインデックスを取得します。
構成:DataTable.Columns.IndexOf(列名)
テーブル内の指定した列名のインデックス(位置)を返します。列が存在しない場合は-1を返します。
使用例:
dtCustomers.Columns.IndexOf("名前") → 1 (「名前」列がテーブルの2番目の位置にある場合)
dtCustomers.Columns.IndexOf("存在しない列") → -1 (存在しない列名を指定した場合)
データの検索 | Select
条件に一致する行を検索します。
構成:DataTable.Select(フィルタ式, [ソート順], [状態])
フィルタ式に一致する行を検索し、DataRow配列として返します。オプションでソート順や検索対象の行の状態を指定できます。
使用例:
dtCustomers.Select("年齢 > 25") → 年齢が25より大きい行を返す
dtCustomers.Select("名前 LIKE '山%'") → 名前が「山」で始まる行を返す
dtCustomers.Select("年齢 > 20", "名前 ASC") → 年齢が20より大きい行を名前の昇順でソートして返す
行の検索 | Rows.Find
主キーの値に基づいて行を検索します。
構成:DataTable.Rows.Find(キー値)
テーブルの主キーに設定されている列の値に基づいて行を検索します。
該当する行が見つかった場合はDataRowを返し、見つからない場合はNothingを返します。
このメソッドを使用するには、テーブルに主キーが設定されている必要があります。
主キーについてはこちらの記事をチェック


使用例:
dtCustomers.Rows.Find(2) → IDが2の行を返す(IDが主キーの場合)
WHERE句によるフィルタリング | AsEnumerable().Where()
LINQを使用して条件に一致する行をフィルタリングします。
構成:DataTable.AsEnumerable().Where(フィルタ条件式)
LINQのWhereメソッドを使用して、より柔軟なフィルタリングを行います。結果はEnumerable(Of DataRow)として返されます。
使用例:
dtCustomers.AsEnumerable().Where(Function(row) row.Field(Of Integer)("年齢") > 25) → 年齢が25より大きい行を返す
列挙可能オブジェクトへの変換 | AsEnumerable
データテーブルを列挙可能なDataRowのコレクションに変換します。
構成:DataTable.AsEnumerable()
テーブルをIEnumerable(Of DataRow)に変換します。これにより、LINQクエリが使用可能になります。
使用例:
dtCustomers.AsEnumerable() → IEnumerable(Of DataRow)オブジェクトに変換
フィルタ結果をテーブルに変換 | CopyToDataTable
IEnumerable(Of DataRow)をDataTableに変換します。
構成:IEnumerable(Of DataRow).CopyToDataTable()
フィルタリングした結果を新しいDataTableに変換します。
フィルタリング結果を新しいテーブルとして使用したい場合に役立ちます。
変換元のIEnumerable(Of DataRow)が空の場合、例外が発生します。
使用例:
dtCustomers.AsEnumerable().Where(Function(row) row.Field(Of Integer)("年齢") > 25).CopyToDataTable() → 年齢が25より大きい行だけを含む新しいデータテーブル
Before/After:
Before (dtCustomers): | After (CopyToDataTable結果): | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
行の配列への変換 | Rows.ToArray
データテーブルの行をDataRowの配列に変換します。
構成:DataTable.Rows.ToArray()
テーブルのすべての行をDataRowの配列に変換します。テーブルデータを配列として扱いたい場合に便利です。
使用例:
dtCustomers.Rows.ToArray() → すべての行をDataRowの配列に変換
テーブルのマージ | Merge
2つのテーブルを結合します。
構成:DataTable.Merge(結合するテーブル, [重複処理], [保持する行の状態])
別のテーブルのデータを現在のテーブルに結合します。列構造が異なる場合、新しい列が追加されます。
主キーが設定されている場合、同じキー値を持つ行は重複として扱われます。
使用例:
dtTarget.Merge(dtSource) → dtSourceのデータをdtTargetに結合
Before/After:
dtTarget (Before): | dtSource: | dtTarget (After): | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
テーブルの比較 | AsEnumerable().SequenceEqual()
2つのテーブルの内容が等しいかどうかを比較します。
構成:DataTable1.AsEnumerable().SequenceEqual(DataTable2.AsEnumerable(), DataRowComparer.Default)
2つのテーブルの内容(行と列の値)が等しいかどうかを比較します。
LINQのSequenceEqualメソッドとDataRowComparerを使用します。
行の順序が異なる場合、内容が同じでもfalseを返します。
使用例:
dtCustomers1.AsEnumerable().SequenceEqual(dtCustomers2.AsEnumerable(), DataRowComparer.Default) → 2つのテーブルの内容が等しい場合はTrue、そうでない場合はFalse
よくあるエラーと対処法
「インデックスが範囲を超えています」エラー
このエラーは、存在しない行や列にアクセスしようとした場合に発生します。
対処法:
1. アクセスする前に行数や列数をチェックする
2. TryCast演算子を使用してNullチェックを行う
「列が見つかりません」エラー
このエラーは、存在しない列名を指定した場合に発生します。
対処法:
1. 列名のスペルミスがないか確認する
2. テーブルに列が存在するかを事前にチェックする
If dt.Columns.Contains("列名") Then
' 処理
End If
「このテーブルにはPrimaryKeyがありません」エラー
Find()メソッドを使用する際に、テーブルに主キーが設定されていない場合に発生します。
対処法:
dt.PrimaryKey = New DataColumn() {dt.Columns("ID")}
詳細はこちらをチェック


まとめ
この記事で解説したメソッドを使いこなすことで、データの取得、加工、変換などを効率的に行うことができます。
初めは覚えることが多いですが、実際のプロジェクトで使用していくうちに自然と身につくでしょう。困ったときは本記事を参考にしながら、徐々にデータテーブルの操作に慣れていってください。
これらのメソッドを活用して、より効率的なUiPathの自動化プロセスを構築してください。
データテーブル以外にも、文字列や数値操作も重要です。
以下の記事を参考にすれば、より効率的に開発を進められるようになるはずです!




コメント