理解の一助|【DataTable】結合アクティビティで処理を高速に_Inner Join編
<実現できること>
2つのDataTableの行を、指定されたルールに従って結合します。
ループを回しての結合と比べると、「開発工数」や「処理時間」が改善されます。
<実現例>
下記、『受注データ(dt_1)』と『商品マスタ(dt_2)』の2つのDataTableがあるとします。
『受注データ(dt_1)』に、「商品コード」に適した「商品名」を持たせた、dt_3を作成します。
◆受注データ(dt_1)の中身
受注コード | 商品コード | 数量 |
Z10001 | A010 | 100 |
Z10002 | A020 | 150 |
Z10003 | B010 | 300 |
◆商品マスタ(dt_2)の中身
商品コード | 商品名 |
A010 | りんご(大) |
A020 | りんご(中) |
B010 | みかん(大) |
B020 | みかん(中) |
◆結果データ(dt_3)の中身
受注コード | 商品コード | 数量 | 商品コード_1 | 商品名 |
Z10001 | A010 | 100 | A010 | りんご(大) |
Z10002 | A020 | 150 | A020 | りんご(中) |
Z10003 | B010 | 300 | B010 | みかん(大) |
<実装イメージ>
※結合ウィザードの設定
◆説明 & コツ
・結合型に「Inner」を指定すると、「列テーブル1」と「列テーブル2」に記載した条件に合致したデータ行を結合します。
※上記例の場合、dt_1とdt_2の”商品コード”が一致した行を紐づけています。
理解の一助|【エラー対応:DataTable編】System.○○およびSystem.Stringで'△△'操作を実行できません。
<エラー例>
DataTableで下記のselectメソッドを実行すると、下記エラーが発生しました。
◆エラーメッセージ
◆実行処理(DataTableのSelectメソッド)
dt_2 = dt_1.Select("[カラム2] Like 'テスト%' ").CopyToDataTable
・変数
変数名 | 型 | 備考 |
dt_1 | DataTable | 全データを格納しているDataTable |
dt_2 | DataTable | 抽出結果を格納するDataTable |
・dt_1の中身
カラム1 | カラム2 |
10 | テスト1 |
20 | TRUE |
30 | テスト2 |
<本エラーの発生原因> ※ご参考程度に…
Uipathの仕様として、「変数パネル」上においてDataTable型で宣言した変数を、ExcelReadRangeアクティビティの出力(output)プロパティに設定した場合、各列の型は、「ジェネリック型」となります。
Select文実行時、DataTableのデータは、1行ずつ該当条件に合致するかどうか判定されます。また、「ジェネリック型」の場合、対象データの値によって、String型、Boolean型、Double型など自動的に判定されます。
Selectメソッドの条件式で比較される値は、同じ型である必要がありますが、上記ケースの場合、2行目の「TRUE」がBoolean型として判定され、もう一方の比較対象のString型('テスト%')と型が不一致だった為、本エラーが発生しています。
※ジェネリック型とは、UiPath独自の型で、「文字列」「数値」「真偽(Boolean)」など、全種類のデータを格納できる型です。
<対象法>
対象ExcelのSelectで判定対象となる列の書式設定を、「文字列」として設定すると、
本エラーは解消されます。
※上記ケースの場合は、「カラム2」列です。
※エラーが解消されない場合、書式設定を行った上で値を入力してみて下さい。
理解の一助|【Excel】Excelアプリケーションを使用せず、セルに値を設定する
<手順>
①:「プロセスを開始(StartProcess)」アクティビティでExcelを起動
②:「ウィンドウにアタッチ(WindowScope)」アクティビティで起動した
Excelをアタッチ
③:「文字を入力(TypeInto)」アクティビティで「名前ボックス」をセレクターで
で設定し、入力対象のセルを設定 例) "B2[k(enter)]"
④:「文字を入力(TypeInto)」アクティビティで「数式バー」をセレクターで
で設定し、入力対象のセルを設定 例) "テスト!![k(enter)]"
※本手順は、Excelマクロ(.xlsm)でも可能です。
※「名前ボックス」・「数式バー」は下記です。
※②~④のサンプル
◆説明 & コツ
・Excelマクロの処理中に特定セルに値を入力する必要があり、今回のやり方を
見つけました。
・「文字を入力(TypeInto)」アクティビティで『[k(enter)]』を挿入すると、
「Enterキー」を押下した状態となり、入力が確定します。
理解の一助|【DataTable】Selectメソッドで任意のデータを抽出する(特定のセルの値を取得する)
<基本フォーマット①:カラムを列番号で指定>
str_1 = dt_1.Rows(int_1).item(int_2).ToString
※Assign(代入)アクティビティで実施
◆変数
変数名 | 型 | 備考 |
dt_1 | DataTable | 全データを格納しているDataTable |
str_1 | String | 抽出結果を格納する文字列型の変数 |
int_1 | Integer |
抽出対象の行番号を指定 |
int_2 | Integer |
抽出対象のカラム番号を指定 |
<基本フォーマット②:カラムを列名で指定>
str_1 = dt_1.Rows(int_1).item("●●●").ToString
※Assign(代入)アクティビティで実施
◆変数
変数名 | 型 | 備考 |
dt_1 | DataTable | 全データを格納しているDataTable |
str_1 | String | 抽出結果を格納する文字列型の変数 |
int_1 | Integer |
抽出対象の行番号を指定 |
◆記号
記号 | 役割 | 説明 |
●●● | カラム名 | DataTableの抽出対象のカラム名 |
◆説明 & コツ
・DataTableの特定セルの抽出が可能です。
※『DataTable.Select(条件)』の抽出結果は、DataRow[ ]型となるので、
上記基本フォーマットでは、「ToString」を使用し、String型として抽出結果
を返しています。
・DataTableの行番号・列番号のカウントは、「0」始まりです。
・基本事項は、下記をご参照下さい。 ↓
・抽出結果が1件もない場合は、エラーとなるのでご注意下さい。
<サンプル①:カラムを列名で指定>
int_1 = 1 ←行番号を指定
int_2 = 0 ←列番号を指定
str_1 = dt_1.Rows(int_1).Item(int_2).ToString
※Assign(代入)アクティビティで実施
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
40 | みかん(中) | 200 |
◆抽出結果(str_1の中身)
20
<サンプル②:カラムを列番号で指定>
int_1 = 1 ←行番号を指定
str_1 = dt_1.Rows(int_1).Item("商品コード").ToString
※Assign(代入)アクティビティで実施
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
40 | みかん(中) | 200 |
◆抽出結果(str_1の中身)
20
理解の一助|【RPA全般】2_RPAの現在と未来
<RPAには3段階存在する>
RPAツールで作成されたロボットには、できることに応じて3段階存在します。
第1段階:定型業務のみ対応 (RPAのみ)
第2段階:非定型業務の一部対応(RPA + AIの一部)
第3段階:非定型業務を完全対応(RPA + AI)
<第1段階:定型業務のみ対応(RPAのみ)>
第1段階は、定型業務(該当業務のマニュアルを読めば誰でもできる業務)のみRPA化している状態です。
ロボットは、判断が必要な処理に関して、実装された通りにしか処理を行いません。
現時点の大半のRPAはこの第1段階に属しています。
例) 問い合わせ業務
お客様からの問合せ内容を管理システムに登録し、保守担当者に連絡します。
<第2段階:非定型業務の一部対応(RPA + AIの一部)>
第2段階は、非定型業務(マニュアルを読むだけでは行えない業務)の一部をRPA化している状態です。
判断が必要な処理に関して、AIがサポートを行いますが、決断は人が行います。
例) 問い合わせ業務
お客様からの問合せ内容を管理システムに登録し、過去データと照らし合わせ、最適と思われる回答をいつくかに絞り込み、保守担当者に提案します。
<第3段階:非定型業務を完全対応(RPA + AI)>
第3段階は、非定型業務(マニュアルを読むだけでは行えない業務)を完全にRPA化している状態です。
RPAの最終形態であり、人はその業務に関与することなく処理が完了します。
例) 問い合わせ業務
お客様からの問合せ内容を管理システムに登録し、ロボットがお客様に回答します。
※本記事の内容は、執筆・更新時点の情報を基に、著者の考えで記載しています。
理解の一助|【RPA全般】1_RPAとは
<RPAとは>
私が「RPAって何ですか?」と訊かれた際、
RPAとは、
「ホワイトカラーの業務改革の1手段」
と説明しています。
ホワイトカラーの業務改革には、既に次のような手段が一般的となっています。
・正社員、派遣社員を雇う
・自社システムを構築し、利用する
・SaaS(ITベンダーが提供するサービスを利用する)
・テレワーク etc…
そして近年、ホワイトカラーの業務改革として急速に社会的地位を築いているのが、RPAです。
<RPAの対象業務>
該当業務のマニュアルを読めば誰でもできる業務は、RPA化の対象となり得ます。
<RPAの特徴>
RPAには、従来の業務改革手段には無い特徴があります。
①コストパフォーマンス
②収益・企業価値の向上
③業務品質の向上
①コストパフォーマンス
①ー1:コスト面
・人のコスト面は、地域・必要スキル等により大きく左右されますので、貴社の状況を踏まえてご検討下さい。
・RPAのコスト面は、採用するRPAツールやライセンス数、サーバ構成等により大きく左右されますので、貴社の状況を踏まえてご検討下さい。
⇒RPAツールで作成したロボットを最大限利用すれば、人のコストよりも、RPAのコストは安くなると思われます。
①ー2:パフォーマンス面
RPAは技術上、24時間365日稼働が可能であり、「人1人」と「ロボット1台」を
比較すると、ロボットは人の4.5倍稼働させることが可能です。
⇒RPAツールで作成したロボットをフル稼働すると、人の4.5倍の働きをします。
比較 |
月 | 年間 |
人 |
160時間 (=8時間 × 20営業日) |
1920時間 (=160時間×12か月) |
RPA |
720時間 (=24時間×30日) |
8640時間 (=720時間×12か月) |
②収益・企業価値の向上
RPAツールで作成したロボットが、ルーチンワーク(単純作業) を行うので、
人は収益性(付加価値)の高い業務に専念できます。また付加価値の高い業務に専念することにより、企業の強みが更に強化され、企業価値の向上が期待できます。
③業務品質の向上
RPAは設計された通りの動きしか行いませんので、ヒューマンエラーを撲滅できます。また、ログを任意に出力させることができますので、動作の証跡を残すことができ、業務オペレーションの品質向上が期待できます。
※本記事の内容は、執筆・更新時点の情報を基に、著者の考えで記載しています。
理解の一助|【DataTable】データから一意のマスタを作成する
<基本フォーマット>
①:dv_1 = dt_1.DefaultView
②:dt_2 = dv_1.ToTable("●●●",▲▲▲,"■■■",…)
※Assign(代入)アクティビティで実施
◆変数
変数名 | 型 | 備考 |
dt_1 | DataTable | 全データを格納しているDataTable |
dt_2 | DataTable | 抽出結果を格納するDataTable |
dv_1 | DataView | 一意のマスタ作成用のDataView |
◆記号
記号 | 役割 | 説明 |
●●● | 第1引数 | 新しいテーブル名。何でもOK。 |
▲▲▲ | 第2引数 |
重複を削除するか否か指定する ・true ⇒ 重複を削除する。 ・false ⇒ 重複を削除しない。 |
■■■ | 第3引数以降 | 新しいテーブルに含まれる列名 |
◆説明 & コツ
・まず、対象のDataTableをDataViewに変換します。(基本フォーマット①)
・続いて、DataViewで必要な列を指定します。(基本フォーマット②)
※ToTableメソッドの第2引数は、「true」にして下さい。
・ToTableメソッドの第3引数以降には、「[ ]」を付けないで下さい。
<サンプル>
・dv_1 = dt_1.DefaultView
・dt_2 = dv_1.ToTable("マスタ",true,"商品区分1","商品区分2")
※Assign(代入)アクティビティで実施
◆全データ(dt_1の中身)
商品コード | 商品区分1 | 商品区分2 |
10 | A | 1 |
20 | A | 1 |
30 | A | 2 |
40 | B | 3 |
50 | B | 4 |
60 | B | 4 |
◆抽出結果(dt_2の中身)
商品区分1 | 商品区分 |
A | 1 |
A | 2 |
B | 3 |
B | 4 |
理解の一助|【DataTable】Selectメソッドで任意のデータを抽出する(部分一致、あいまい検索)
<基本フォーマット>
dt_2 = dt_1.Select(" [●●●] LIKE '▲▲▲%' ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆変数
変数名 | 型 | 備考 |
dt_1 | DataTable | 全データを格納しているDataTable |
dt_2 | DataTable | 抽出結果を格納するDataTable |
◆記号
記号 | 役割 | 説明 |
●●● | カラム名 | DataTableの抽出対象のカラム名 |
▲▲▲ | 抽出対象 | 抽出対象のデータ |
% | 曖昧な部分 | 「%」に当たる部分は、何でもOK |
◆説明 & コツ
・「LIKE」演算子を用いることにより、「あいまい検索」が可能です。
・「%」は半角を用いる必要があります。
・基本事項は、下記をご参照下さい。 ↓
<サンプル①>
dt_2 = dt_1.Select(" [商品名] LIKE 'りんご%' ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
40 | みかん(中) | 200 |
◆抽出結果(dt_2の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
<サンプル②>
dt_2 = dt_1.Select(" [商品名] LIKE '%(大)' ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
40 | みかん(中) | 200 |
◆抽出結果(dt_2の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
30 | みかん(大) | 300 |
理解の一助|【DataTable】Selectメソッドで任意のデータを抽出する(抽出結果が0行の場合の対処法)
<実行エラー>
dt_2 = dt_1.Select(" [●●●] = '▲▲▲' ").CopyToDataTable
※Assign(代入)アクティビティで実施
上記式を実行した際、Selectの抽出結果が0行の場合、「ソースには、DataRow が含まれていません。」とエラーが表示されます。
<対処法>
上記データ抽出処理を「Try catch(トライキャッチ)」アクティビティで囲みます。
・結果が1行以上⇒ 次のアクティビティに処理が移ります。
・結果が0行 ⇒ 「Try catch」アクティビティの「catches」に処理が移ります。
◆Try部分
エラー発生は想定されるアクティビティを「Try」に入れます。
◆Catches部分
エラー発生時に行う処理を記載します。
※初心者の方は、Excepitonを「exception」で設定しておくと無難です。
※下記例では、後続処理の関係上、存在フラグ(bool_DataExists)を設定していますが、Catches部分にアクティビティが無くても動きます。
<説明>
・『DataTable.Select(条件)』の基本事項は、下記をご参照下さい。
・本エラーの発生原因(ご参考程度に…)
右辺の「dt_1.Select(" [●●●] = '▲▲▲' ")」を実行した結果が0行の場合は、「null」が返されます。そして、その「null」を「CopyToDataTable」でDataTableに変換しようとして本エラーが発生しています。
理解の一助|【エラー対応:Excel編】『別のプロセスで使用されているため、プロセスはファイル~』の対処法
<対象法①>
処理で使用するファイルが開かれてないかご確認下さい。
※自身で開いていなくても、他の方が該当ファイルを開いている可能性があります。
<対象法②>
タスクマネージャーでExcelのプロセスが残っていないかご確認下さい。
※タスクバーにExcelが無くても、プロセスに残っている場合がああります。
1. タスクバーで右クリック & タスクマネージャーをクリック
2. 「プロセス」タブをクリック
3. Excelのプロセスが存在するか確認
⇒ 存在すればExcelのプロセスを選択し、「タスクの終了」をクリック
4. プロセスにExcelが表示されていないことを確認し、再度実行。
<本事象の発生原因>
UiPathがアクティビティでExcelを扱う際、人の手で操作する方法と異なるアプロ―チでExcelを操作します。
UiPathでExcel処理実行中にジョブを中止すると、タスクバーにはExcelのアイコンが無くても、プロセスは生きており、該当ファイルを開き続きている状態となる場合があります。
本エラーが発生した際は、Excelのプロセスが存在していないかをご確認の上、実行してみて下さい。
理解の一助|【DataTable】Selectメソッドでソートのみを行う
<基本フォーマット①:ASC(昇順)バージョン>
dt_2 = dt_1.Select(" '1' = '1' ","[■■■] ASC ").CopyToDataTable
<基本フォーマット②:DESC(降順)バージョン>
dt_2 = dt_1.Select(" '1' = '1' ","[■■■] DESC ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆変数
変数名 | 型 | 備考 |
dt_1 | DataTable | 全データを格納しているDataTable |
dt_2 | DataTable | 抽出結果を格納するDataTable |
◆記号
記号 | 役割 | 説明 |
■■■ | カラム名 | ソート対象のカラム名 |
◆説明 & コツ
・抽出条件を『" '1' = '1' "』とすれば、全データを抽出します。
・ソート対象とキーワード(ASC or DESC)との間は、必ず『半角スペース』を用いる必要があります。
〇: ~," [■■■] ASC") ←ソート対象とキーワードとの間に、半角を用いている。
✖ :~," [■■■] ASC") ←ソート対象とキーワードとの間に、全角を用いている。
・ソート対象は、複数指定することが可能です。
例)dt_2 = dt_1.Select(" '1' = ’1’ ","[■■■] ASC , [●●●] DESC").CopyToDataTable
※上記例では、抽出データに対し、第1に「■■■」カラムを基準に昇順にソートが行われ、「■■■」カラムに同一データがある場合は、該当データ内で「●●●」カラムを基準に降順にソートが行われます。
<サンプル>
dt_2 = dt_1.Select(" '1' = '1' ","[単価] ASC , [商品コード] DESC").CopyToDataTable
※Assign(代入)アクティビティで実施
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
40 | みかん(中) | 200 |
◆抽出結果(dt_2の中身)
商品コード | 商品名 | 単価 |
40 | みかん(中) | 200 |
30 | みかん(大) | 300 |
20 | りんご(中) | 300 |
10 | りんご(大) | 400 |
<参考>
理解の一助|【DataTable】Selectメソッドで任意のデータを抽出する(ソートあり)
<基本フォーマット①:ASC(昇順)バージョン>
dt_2 = dt_1.Select(" [●●●] = '▲▲▲' ", "[■■■] ASC ").CopyToDataTable
<基本フォーマット②:DESC(降順)バージョン>
dt_2 = dt_1.Select(" [●●●] = '▲▲▲' ", "[■■■] DESC ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆変数
変数名 | 型 | 備考 |
dt_1 | DataTable | 全データを格納しているDataTable |
dt_2 | DataTable | 抽出結果を格納するDataTable |
◆記号
記号 | 役割 | 説明 |
●●● | カラム名 | DataTableの抽出対象のカラム名 |
▲▲▲ | 抽出対象 | 抽出対象のデータ |
■■■ | カラム名 | ソート対象のカラム名 |
◆説明 & コツ
・DataTable.Selectメソッドを使用すると、抽出データの並びが不規則になることがあります。ソート機能を用いれば、抽出データの並びを制御可能です。
・ソート対象とキーワード(ASC or DESC)との間は、必ず『半角スペース』を用いる必要があります。
〇: ~," [■■■] ASC") ←ソート対象とキーワードとの間に、半角を用いている。
✖ :~," [■■■] ASC") ←ソート対象とキーワードとの間に、全角を用いている。
・ソート対象は、複数指定することが可能です。
例)dt_2 = dt_1.Select("[●●●] = ’▲▲▲’ ","[■■■] ASC , [●●●] DESC").CopyToDataTable
※上記例では、抽出データに対し、第1に「■■■」カラムを基準に昇順にソートが行われ、「■■■」カラムに同一データがある場合は、該当データ内で「●●●」カラムを基準に降順にソートが行われます。
<サンプル>
dt_2 = dt_1.Select(" [単価] >= '300'","[単価] ASC , [商品コード] DESC").CopyToDataTable
※Assign(代入)アクティビティで実施
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
40 | みかん(中) | 200 |
◆抽出結果(dt_2の中身)
商品コード | 商品名 | 単価 |
30 | みかん(大) | 300 |
20 | りんご(中) | 300 |
10 | りんご(大) | 400 |
<参考>
理解の一助|【DataTable】Selectメソッドで任意のデータを抽出する(複数条件)
<基本フォーマット①:AND バージョン>
dt_test_2 = dt_test_1.Select(" [●●●] = '▲▲▲' and [■■■] = '×××' ").CopyToDataTable
<基本フォーマット②:OR バージョン>
dt_test_2 = dt_test_1.Select(" [●●●] = '▲▲▲' or [■■■] = '×××' ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆変数
変数名 | 型 | 備考 |
dt_test_1 | DataTable | 全データを格納しているDataTable |
dt_test_2 | DataTable | 抽出結果を格納するDataTable |
◆記号
記号 | 役割 | 説明 |
●●● | カラム名 | DataTableの抽出対象のカラム名 |
▲▲▲ | 抽出対象 | 抽出対象のデータ |
■■■ | カラム名 | DataTableの抽出対象のカラム名 |
××× | 抽出対象 | 抽出対象のデータ |
◆説明 & コツ
・「and」「or」を用いれば、複数の条件に合致したデータのみ抽出できます。
※3つ以上の抽出条件も設定可能です。
・基本事項は下記をご参照下さい。 ↓
<サンプル①:AND バージョン>
dt_2 = dt_1.Select(" [単価] >= '300' and [商品名] = 'りんご' ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご | 400 |
20 | りんご | 300 |
30 | みかん | 300 |
40 | みかん | 200 |
◆抽出結果(dt_2の中身)
商品コード | 商品名 | 単価 |
20 | りんご | 300 |
<サンプル②:OR バージョン>
dt_2 = dt_1.Select(" [単価] = '300' or [商品名] = 'みかん' ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご | 400 |
20 | りんご | 300 |
30 | みかん | 300 |
40 | みかん | 200 |
◆抽出結果(dt_2の中身)
商品コード | 商品名 | 単価 |
20 | りんご | 300 |
30 | みかん | 300 |
40 | みかん | 200 |
理解の一助|【DataTable】Selectメソッドで任意のデータを抽出する(変数の利用)
<基本フォーマット>
dt_2 = dt_1.Select(" [●●●] = '" + str_1 + "' ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆変数
変数名 | 型 | 備考 |
dt_1 | DataTable | 全データを格納しているDataTable |
dt_2 | DataTable | 抽出結果を格納するDataTable |
str_1 | String | 抽出対象のデータ |
◆記号
記号 | 役割 | 説明 |
●●● | カラム名 | DataTableの抽出対象のカラム名 |
◆説明 & コツ
・変数は、String(文字列)型にする必要があります。
・基本事項は、下記をご参照下さい。 ↓
<サンプル①:String型バージョン>
・str_1 = "300"
・dt_2 = dt_1.Select(" [単価] >= '" + str_1 + "' ").CopyToDataTable
※Assign(代入)アクティビティで実施
※str_1:String型
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
40 | みかん(中) | 200 |
◆抽出結果(dt_2の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
<サンプル②:Integer型バージョン>
・int_1 = 300
・dt_2 = dt_1.Select(" [単価] >= '" + int_1.ToString + "' ").CopyToDataTable
※Assign(代入)アクティビティで実施
※int_1:Integer型
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
40 | みかん(中) | 200 |
◆抽出結果(dt_2の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
※サンプル①、サンプル②とも同じ結果になります。
理解の一助|【DataTable】Selectメソッドで任意のデータを抽出する
<基本フォーマット>
dt_2 = dt_1.Select(" [●●●] = '▲▲▲' ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆変数
変数名 | 型 | 備考 |
dt_1 | DataTable | 全データを格納しているDataTable |
dt_2 | DataTable | 抽出結果を格納するDataTable |
◆記号
記号 | 役割 | 説明 |
●●● | カラム名 | DataTableの抽出対象のカラム名 |
▲▲▲ | 抽出対象 | 抽出対象のデータ |
◆説明 & コツ
・『DataTable.Select(条件)』で条件に合致するデータのみ抽出可能です。
※『DataTable.Select(条件)』の抽出結果は、DataRow[ ]型となるので、
上記基本フォーマットでは、「CopyToDataTable」を使用し、DataTable型
として抽出結果を返しています。
・条件には、変数を使用することも可能です。
例) dt_2 = dt_1.Select(" [単価] = '" + int_単価.ToString + "'").CopyToDataTable
・抽出対象は、『' '』(シングルクォーテーション)で囲む必要があります。
・カラム名を囲んでいる『[ ]』は、付けることをお勧めします。
※カラム名が数字の場合、『[ ]』を付けないと動作しない可能性があります。
・抽出結果が1件もない場合は、エラーとなるのでご注意下さい。
<サンプル>
dt_2 = dt_1.Select(" [単価] >= '300' ").CopyToDataTable
※Assign(代入)アクティビティで実施
◆全データ(dt_1の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |
40 | みかん(中) | 200 |
◆抽出結果(dt_2の中身)
商品コード | 商品名 | 単価 |
10 | りんご(大) | 400 |
20 | りんご(中) | 300 |
30 | みかん(大) | 300 |