【保存版】UiPathで使えるデータテーブル操作テクニックを全網羅!Select、Merge、AsEnumerableなど!UiPathやVB.Netで使えるデータテーブル型変数のメソッド完全ガイド

UiPath データテーブル型変数で使用できるメソッド総まとめ

データテーブルとは

UiPathでのRPA開発において、データテーブルは重要な変数です。
ExcelやCSVからデータを取り込んだり、データベースから情報を抽出したりする際に使用します。

本記事ではデータテーブルで使える主要なメソッドを、初心者にも分かりやすく解説します。

データテーブルとは以下のような表形式のデータのことを指します。

ID名前年齢
1田中太郎32
2山田次郎55
3佐藤花子26
4鈴木一郎23
これがデータテーブル

それではデータテーブルのメソッドについて解説します

大量のメソッドを解説しているので、目次から必要なメソッドを見つけてください。
ブックマークしていつでも見られるようにすると便利です。

テーブルの新規作成 | New DataTable

新しい空のデータテーブルを作成します。

構成:New DataTable([テーブル名])

データTable型の変数を初期化する際に使用します。テーブル名は省略可能です。
この時点ではまだ列も行も存在しない空のテーブルが作成されます。

使用例:

VB
New DataTable("顧客情報") → 空の「顧客情報」という名前のデータテーブル

テーブルクローン作成 | Clone

既存テーブル構造のみをコピーした、新しいテーブルを作成します。
テーブル内のデータは引き継がれません

構成:DataTable.Clone()

元のテーブルと同じ列構造を持つ新しい空のテーブルを作成します。データはコピーされず、列の定義のみがコピーされます。

使用例:

VB
dtSource.Clone() → dtSourceと同じ列構造を持つ空のデータテーブル

Before/After:

Before (dtSource): After (Clone結果):
ID 名前 年齢
1 山田 30
2 佐藤 25
ID 名前 年齢
データテーブルの構造だけコピーされた

元テーブルに設定されている制約やリレーションもコピーされます。

テーブル完全コピー | Copy

既存テーブルを完全にコピーした、新しいテーブルを作成します。

構成:DataTable.Copy()

元のテーブルと同じ列構造とデータを持つ新しいテーブルを作成します。
構造とデータの両方が完全にコピーされるため、元のテーブルに影響を与えずに操作できます。

使用例:

VB
dtSource.Copy() → dtSourceと同じ列構造とデータを持つ新しいデータテーブル

Before/After:

Before (dtSource):After (Copy結果):
ID 名前 年齢
1 山田 30
2 佐藤 25
ID 名前 年齢
1 山田 30
2 佐藤 25
データテーブルがコピーされた

テーブルの行数と列数の取得 | Rows.Count, Columns.Count

テーブルの行数または列数を取得します。

構成:DataTable.Rows.Count
DataTable.Columns.Count

Rows.Countはテーブルに含まれる行の数を、Columns.Countは列の数を返します。
データの処理前にテーブルのサイズを確認する際によく使われます。

使用例:

VB
dtCustomers.Rows.Count → 5 (テーブルに5行のデータがある場合)
dtCustomers.Columns.Count → 3 (テーブルに3列ある場合)

行の追加 | Rows.Add

データテーブルに新しい行を追加します。

構成:DataTable.Rows.Add(値1, 値2, ...)

テーブルの列順に従って値を指定し、新しい行を追加します。
値の数は列数と一致している必要があります。

値を指定せず、空の行を追加することも可能です。

追加する値のデータ型は、対応する列のデータ型と互換性がある必要があります。

使用例:

VB
dtCustomers.Rows.Add(3, "田中", 28) → 新しい行として「3, 田中, 28」を追加
dtCustomers.Rows.Add() → 空の行を追加

Before/After:

Before:After:
ID 名前 年齢
1 山田 30
2 佐藤 25
ID 名前 年齢
1 山田 30
2 佐藤 25
3 田中 28
新たに行が追加された

行の削除 | Rows.Remove

指定した行をデータテーブルから削除します。

構成:DataTable.Rows.Remove(DataRow)

削除したい行(DataRow)を指定して、テーブルから削除します。

削除対象の行がテーブルに存在しない場合、エラーが発生します。

使用例:

VB
dtCustomers.Rows.Remove(dtCustomers.Rows(0)) → テーブルの最初の行を削除

Before/After:

Before:After:
ID 名前 年齢
1 山田 30
2 佐藤 25
3 田中 28
ID 名前 年齢
2 佐藤 25
3 田中 28
最初の行が削除された

行のクリア | Rows.Clear

データテーブルからすべての行を削除します。

構成:DataTable.Rows.Clear()

テーブル内のすべての行データを削除します。テーブルの列構造は維持されます。

使用例:

VB
dtCustomers.Rows.Clear() → すべての行データを削除(列構造は維持)

Before/After:

Before:After:
ID 名前 年齢
1 山田 30
2 佐藤 25
3 田中 28
ID 名前 年齢
全ての行が削除された

インポート行 | ImportRow

別のテーブルから行をインポートします。

構成:DataTable.ImportRow(DataRow)

別のテーブルの行(DataRow)を現在のテーブルにインポートします。列構造が一致している必要があります。

列名は一致している必要がありますが、列の順序は異なっていても問題ありません。

使用例:

VB
dtTarget.ImportRow(dtSource.Rows(0)) → dtSourceの最初の行をdtTargetにインポート

Before/After:

dtSource(インポート元):dtTarget (Before):dtTarget (After):
ID 名前 年齢
1 山田 30
2 佐藤 25
ID 名前 年齢
3 田中 28
ID 名前 年齢
3 田中 28
1 山田 30
インポート元の山田さんの行がdtTargetに追加された

列の追加 | Columns.Add

データテーブルに新しい列を追加します。

構成:DataTable.Columns.Add(列名, [データ型])

列名とデータ型を指定して、テーブルに新しい列を追加します。
データ型は省略可能で、省略した場合はString型になります。

使用例:

VB
dtCustomers.Columns.Add("住所", GetType(String)) → String型の「住所」列を追加
dtCustomers.Columns.Add("年収", GetType(Decimal)) → Decimal型の「年収」列を追加

Before/After:

Before:After:
ID 名前 年齢
1 山田 30
2 佐藤 25
ID 名前 年齢 住所
1 山田 30
2 佐藤 25
住所列が追加された

列の削除 | Columns.Remove

指定した列をデータテーブルから削除します。

構成:DataTable.Columns.Remove(列名)

テーブルから指定した名前の列を削除します。

削除対象の列がテーブルに存在しない場合、エラーが発生します。

使用例:

VB
dtCustomers.Columns.Remove("年齢") → 「年齢」列を削除

Before/After:

Before:After:
ID 名前 年齢
1 山田 30
2 佐藤 25
ID 名前
1 山田
2 佐藤
年齢列が削除された

列のインデックス取得 | Columns.IndexOf

指定した列名のインデックスを取得します。

構成:DataTable.Columns.IndexOf(列名)

テーブル内の指定した列名のインデックス(位置)を返します。列が存在しない場合は-1を返します。

使用例:

VB
dtCustomers.Columns.IndexOf("名前") → 1 (「名前」列がテーブルの2番目の位置にある場合)
dtCustomers.Columns.IndexOf("存在しない列") → -1 (存在しない列名を指定した場合)

データの検索 | Select

条件に一致する行を検索します。

構成:DataTable.Select(フィルタ式, [ソート順], [状態])

フィルタ式に一致する行を検索し、DataRow配列として返します。オプションでソート順や検索対象の行の状態を指定できます。

使用例:

VB
dtCustomers.Select("年齢 > 25") → 年齢が25より大きい行を返す
dtCustomers.Select("名前 LIKE '山%'") → 名前が「山」で始まる行を返す
dtCustomers.Select("年齢 > 20", "名前 ASC") → 年齢が20より大きい行を名前の昇順でソートして返す

行の検索 | Rows.Find

主キーの値に基づいて行を検索します。

構成:DataTable.Rows.Find(キー値)

テーブルの主キーに設定されている列の値に基づいて行を検索します。
該当する行が見つかった場合はDataRowを返し、見つからない場合はNothingを返します。

このメソッドを使用するには、テーブルに主キーが設定されている必要があります。

主キーについてはこちらの記事をチェック

あわせて読みたい
データテーブルのPrimaryKey(主キー)設定と活用法完全ガイド【UiPath・VB.Net入門】 主キー(PrimaryKey)とは?UiPathデータテーブルでの役割と重要性 主キー(PrimaryKey)とは、データテーブル内の各行を一意に識別するための特別な列のことです。 もっと...

使用例:

VB
dtCustomers.Rows.Find(2) → IDが2の行を返す(IDが主キーの場合)

WHERE句によるフィルタリング | AsEnumerable().Where()

LINQを使用して条件に一致する行をフィルタリングします。

構成:DataTable.AsEnumerable().Where(フィルタ条件式)

LINQのWhereメソッドを使用して、より柔軟なフィルタリングを行います。結果はEnumerable(Of DataRow)として返されます。

使用例:

VB
dtCustomers.AsEnumerable().Where(Function(row) row.Field(Of Integer)("年齢") > 25) → 年齢が25より大きい行を返す

列挙可能オブジェクトへの変換 | AsEnumerable

データテーブルを列挙可能なDataRowのコレクションに変換します。

構成:DataTable.AsEnumerable()

テーブルをIEnumerable(Of DataRow)に変換します。これにより、LINQクエリが使用可能になります。

使用例:

VB
dtCustomers.AsEnumerable() → IEnumerable(Of DataRow)オブジェクトに変換

フィルタ結果をテーブルに変換 | CopyToDataTable

IEnumerable(Of DataRow)をDataTableに変換します。

構成:IEnumerable(Of DataRow).CopyToDataTable()

フィルタリングした結果を新しいDataTableに変換します。
フィルタリング結果を新しいテーブルとして使用したい場合に役立ちます。

変換元のIEnumerable(Of DataRow)が空の場合、例外が発生します。

使用例:

VB
dtCustomers.AsEnumerable().Where(Function(row) row.Field(Of Integer)("年齢") > 25).CopyToDataTable() → 年齢が25より大きい行だけを含む新しいデータテーブル

Before/After:

Before (dtCustomers):After (CopyToDataTable結果):
ID 名前 年齢
1 山田 30
2 佐藤 25
3 田中 28
ID 名前 年齢
1 山田 30
3 田中 28
年齢が25より大きいレコードのみフィルター

行の配列への変換 | Rows.ToArray

データテーブルの行をDataRowの配列に変換します。

構成:DataTable.Rows.ToArray()

テーブルのすべての行をDataRowの配列に変換します。テーブルデータを配列として扱いたい場合に便利です。

使用例:

VB
dtCustomers.Rows.ToArray() → すべての行をDataRowの配列に変換

テーブルのマージ | Merge

2つのテーブルを結合します。

構成:DataTable.Merge(結合するテーブル, [重複処理], [保持する行の状態])

別のテーブルのデータを現在のテーブルに結合します。列構造が異なる場合、新しい列が追加されます。

主キーが設定されている場合、同じキー値を持つ行は重複として扱われます。

使用例:

VB
dtTarget.Merge(dtSource) → dtSourceのデータをdtTargetに結合

Before/After:

dtTarget (Before):dtSource:dtTarget (After):
ID 名前 年齢
1 山田 30
2 佐藤 25
ID 名前 住所
1 山田 東京
3 田中 大阪
ID 名前 年齢 住所
1 山田 30 東京
2 佐藤 25
3 田中 大阪
dtTargetとdtSourceをマージ(結合)した

テーブルの比較 | AsEnumerable().SequenceEqual()

2つのテーブルの内容が等しいかどうかを比較します。

構成:DataTable1.AsEnumerable().SequenceEqual(DataTable2.AsEnumerable(), DataRowComparer.Default)

2つのテーブルの内容(行と列の値)が等しいかどうかを比較します。
LINQのSequenceEqualメソッドとDataRowComparerを使用します。

行の順序が異なる場合、内容が同じでもfalseを返します。

使用例:

VB
dtCustomers1.AsEnumerable().SequenceEqual(dtCustomers2.AsEnumerable(), DataRowComparer.Default) → 2つのテーブルの内容が等しい場合はTrue、そうでない場合はFalse

よくあるエラーと対処法

「インデックスが範囲を超えています」エラー

このエラーは、存在しない行や列にアクセスしようとした場合に発生します。

対処法:
1. アクセスする前に行数や列数をチェックする
2. TryCast演算子を使用してNullチェックを行う

「列が見つかりません」エラー

このエラーは、存在しない列名を指定した場合に発生します。

対処法:
1. 列名のスペルミスがないか確認する
2. テーブルに列が存在するかを事前にチェックする

VB
If dt.Columns.Contains("列名") Then
' 処理
End If

「このテーブルにはPrimaryKeyがありません」エラー

Find()メソッドを使用する際に、テーブルに主キーが設定されていない場合に発生します。

対処法:

VB
dt.PrimaryKey = New DataColumn() {dt.Columns("ID")}

詳細はこちらをチェック

あわせて読みたい
データテーブルのPrimaryKey(主キー)設定と活用法完全ガイド【UiPath・VB.Net入門】 主キー(PrimaryKey)とは?UiPathデータテーブルでの役割と重要性 主キー(PrimaryKey)とは、データテーブル内の各行を一意に識別するための特別な列のことです。 もっと...

まとめ

この記事で解説したメソッドを使いこなすことで、データの取得、加工、変換などを効率的に行うことができます。

初めは覚えることが多いですが、実際のプロジェクトで使用していくうちに自然と身につくでしょう。困ったときは本記事を参考にしながら、徐々にデータテーブルの操作に慣れていってください。

これらのメソッドを活用して、より効率的なUiPathの自動化プロセスを構築してください。

データテーブル以外にも、文字列や数値操作も重要です。
以下の記事を参考にすれば、より効率的に開発を進められるようになるはずです!

あわせて読みたい
【保存版】UiPath文字列操作テクニックを全網羅!CompareTo、IndexOf、PadLeftなど!UiPathやVB.Netで使... UiPathでは文字列(String型変数)を操作するための便利なメソッドがたくさん用意されています。初心者の方でも理解しやすいように、UiPathで使えるString型変数のメソ...
あわせて読みたい
【保存版】UiPathで使える数値操作テクニックを全網羅!CInt、IsNumeric、MaxValuetなど!UiPathやVB.Ne... UiPathでRPAを開発する際、数値データの操作は非常に重要な要素です。本記事では、UiPathで使用できるすべての数値型変数のメソッドを詳しく解説します。初心者の方でも...
Ueda
フリーランスエンジニア
RPAエンジニアです。
UipathやVBAを使用した開発を得意としています。優れた可読性と効率的な設計を併せ持つRPA開発を心がけています。
RPA初心者向けの教育経験多数あり。RPAの開発サポートも承ります。

Wordpressを用いたHP制作のお仕事も経験があります。本サイトもWordpressを用いて制作しております。

ペットのチワプーと暮らしてます。
  • URLをコピーしました!

コメント

コメントする