理解の一助:UiPath開発のコツ

UiPath(VB .NET Framework)開発で詰まった際に使える、ちょっとしたコツをまとめています。

理解の一助|【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 みかん(大)

 

<実装イメージ>

f:id:rikaix:20190922180226p:plain


※結合ウィザードの設定

f:id:rikaix:20190922180334p:plain

 

◆説明 & コツ

 ・結合型に「Inner」を指定すると、「列テーブル1」と「列テーブル2」に記載した条件に合致したデータ行を結合します。

 ※上記例の場合、dt_1とdt_2の”商品コード”が一致した行を紐づけています。

 

理解の一助|【エラー対応:DataTable編】System.○○およびSystem.Stringで'△△'操作を実行できません。

<エラー例>

 DataTableで下記のselectメソッドを実行すると、下記エラーが発生しました。

  

 ◆エラーメッセージ

 f:id:rikaix:20190821205122p:plain

 

 ◆実行処理(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)」など、全種類のデータを格納できる型です。


<対象法>

 対象ExcelSelectで判定対象となる列の書式設定を、「文字列」として設定すると、

 本エラーは解消されます。

 ※上記ケースの場合は、「カラム2」列です。

 ※エラーが解消されない場合、書式設定を行った上で値を入力してみて下さい。

理解の一助|【Excel】Excelアプリケーションを使用せず、セルに値を設定する

<手順>

  ①:「プロセスを開始(StartProcess)」アクティビティでExcelを起動

  ②:「ウィンドウにアタッチ(WindowScope)」アクティビティで起動した

    Excelをアタッチ

  ③:「文字を入力(TypeInto)」アクティビティで「名前ボックス」をセレクターで

    で設定し、入力対象のセルを設定 例) "B2[k(enter)]"

  ④:「文字を入力(TypeInto)」アクティビティで「数式バー」をセレクターで

    で設定し、入力対象のセルを設定 例) "テスト!![k(enter)]"

 

  ※本手順は、Excelマクロ(.xlsm)でも可能です。

  ※「名前ボックス」・「数式バー」は下記です。

   f:id:rikaix:20190831193552p:plain

  ※②~④のサンプル
  f:id:rikaix:20190831194439p:plain

 

 

◆説明 & コツ

 ・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件もない場合は、エラーとなるのでご注意下さい。

rikaix.hatenablog.com

 

<サンプル①:カラムを列名で指定>

 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手段」

 

と説明しています。

 

ホワイトカラーの業務改革には、既に次のような手段が一般的となっています。

  ・正社員、派遣社員を雇う

  ・BPOアウトソーシング

  ・自社システムを構築し、利用する

  ・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」演算子を用いることにより、「あいまい検索」が可能です。

 

 ・「%」は半角を用いる必要があります。

  

 ・基本事項は、下記をご参照下さい。 

rikaix.hatenablog.com

 

<サンプル①>

 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 が含まれていません。」とエラーが表示されます。

f:id:rikaix:20190703220325p:plain

 

 

<対処法>

 上記データ抽出処理を「Try catch(トライキャッチ)」アクティビティで囲みます。

  ・結果が1行以上⇒ 次のアクティビティに処理が移ります。

  ・結果が0行 ⇒ 「Try catch」アクティビティの「catches」に処理が移ります。

 

 ◆Try部分 

  エラー発生は想定されるアクティビティを「Try」に入れます。

  f:id:rikaix:20190706174107p:plain

 

 ◆Catches部分 

  エラー発生時に行う処理を記載します。

  ※初心者の方は、Excepitonを「exception」で設定しておくと無難です。

  ※下記例では、後続処理の関係上、存在フラグ(bool_DataExists)を設定していますが、Catches部分にアクティビティが無くても動きます。

  f:id:rikaix:20190706174959p:plain

 

<説明>

 ・『DataTable.Select(条件)』の基本事項は、下記をご参照下さい。

rikaix.hatenablog.com

 

 ・本エラーの発生原因(ご参考程度に…)

 右辺の「dt_1.Select(" [●●●] = '▲▲▲' ")」を実行した結果が0行の場合は、「null」が返されます。そして、その「null」を「CopyToDataTable」でDataTableに変換しようとして本エラーが発生しています。

理解の一助|【エラー対応:Excel編】『別のプロセスで使用されているため、プロセスはファイル~』の対処法

<対象法①>

 処理で使用するファイルが開かれてないかご確認下さい。

 ※自身で開いていなくても、他の方が該当ファイルを開いている可能性があります。

 

<対象法②>

 タスクマネージャーでExcelのプロセスが残っていないかご確認下さい。

 ※タスクバーにExcelが無くても、プロセスに残っている場合がああります。

 

 1. タスクバーで右クリック & タスクマネージャーをクリック

f:id:rikaix:20190630184236p:plain

 

 2. 「プロセス」タブをクリック

f:id:rikaix:20190630184912p:plain

 

 3. Excelのプロセスが存在するか確認 

   ⇒ 存在すればExcelのプロセスを選択し、「タスクの終了」をクリック

f:id:rikaix:20190630185551p:plain

 

 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

 

<参考>

下記参考はC#の例しかありませんが、VB .NETでも通用します。

docs.microsoft.com

理解の一助|【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

 

<参考>

下記参考はC#の例しかありませんが、VB .NETでも通用します。

docs.microsoft.com

理解の一助|【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つ以上の抽出条件も設定可能です。

 

 ・基本事項は下記をご参照下さい。 

rikaix.hatenablog.com

 

 

<サンプル①: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(文字列)型にする必要があります。

 

 ・基本事項は、下記をご参照下さい。 

rikaix.hatenablog.com

 

 

<サンプル①: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件もない場合は、エラーとなるのでご注意下さい。

rikaix.hatenablog.com

 

<サンプル>

    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

 

<参考>

下記参考はC#の例しかありませんが、VB .NETでも通用します。

docs.microsoft.com