今回のロボットは、2つのCSVファイルを共通する列を選択して結合する、CSVファイルのジョインです。
動画解説
目次
1.エクセルでおなじみIndex Match関数をUipathで
2.ロボットの作業工程全容
3.各工程解説
1.エクセルでおなじみIndex Match関数をUipathで
2つのCSVファイルを結合したいと思ったら皆さんどうされてますか?
僕は、エクセル関数を用いて計算してしまいますね。
エクセル操作がお得意な方ならばおなじみのIndex関数とMatch関数の組み合わせです。
①同じシートに2つのデータをコピペします。
②結合したい列を作成して各列計算する。
計算式
=IF(ISERROR(INDEX(K:K,MATCH(B2,J:J,FALSE)))=TRUE,””,INDEX(K:K,MATCH(B2,J:J,FALSE)))
わかりやすく分解して説明しましょう。
MATCH(B2,J:J,FALSE)
検索値B2はJ列で”何番目”にあるか(仮に3番目だったとします)。
INDEX(K:K, MATCH(B2,J:J,FALSE)) ⇒ INDEX(K:K, 3)
K列の3番目の値はなにか
ISERROR(INDEX(K:K,MATCH(B2,J:J,FALSE))) ⇒ ISERROR(INDEXの結果)
INDEXの結果は数式エラーを起こしているか?(TrueかFalseで返ってきます)
ISERRORはもともとそのセルが数式エラーを起こしているかを確認するものです。
IF(ISERROR(INDEX(K:K,MATCH(B2,J:J,FALSE)))=TRUE,””,INDEX(K:K,MATCH(B2,J:J,FALSE))) ⇒ IF(ISERRORの結果=TRUE,””,INDEXの結果)
もし、ISERRORの結果がTRUEならば空白に、FALSEならばINDEXの結果を返します。
さぁ、これでIndex Match関数はマスターできましたか?
もう何が何だか呪文みたいになってしまってますが、そんな方にUipathはいかがでしょう!実は同じようなことがUipathにもできるんです!
2.ロボットの作業工程全容
①データAの列名選択
②データBの列名選択
③データテーブルを結合
④CSVに書き込む
3.各工程解説
今回はデータテーブルをUipathにて扱います。
UipathはVB.netというプログラミング言語を使用しますので、少々知識と慣れが必要ですが、頑張って理解しましょう。
①データAの列名選択
アクティビティ:Read Csv Fileを挿入
読み込みたいファイルを選択する(ファイルパスを入れても可)。
最初は、データA.csvファイルを読み込みます。
読み込んだデータをデータテーブル”tableA”に格納します。
アクティビティ:Assignを挿入
計算式 i=0
(ループ処理をする際によく使います)
アクティビティ:Assignを挿入
計算式 列名=new list(of string)
列名[リスト文字列型]の宣言をしています。
アクティビティ:Whileを挿入
条件式 i< tableA.Columns.Count
tableA.Columns.Countはデータテーブル”tableA”の列数を算出します。
ループ処理内容{
アクティビティ:コレクションに追加を挿入
クティビティ:Assignを挿入
計算式 i=i+1 iの値を1ずつカウントさせる。
}
iの値がデータテーブル”tableA”の列数以上になったらループ処理終了。
アクティビティ:Input Dialogを挿入
上段にタイトルを入力
下段にラベルを入力
プロパティのオプションに配列を入力するとこんな感じになります。
列名はList型なので.ToArrayをつけることで配列型へ変換してます。
選択した列名は変数”データA_共通列”に格納します。
②データBの列名選択
アクティビティ:Read Csv Fileを挿入
読み込みたいファイルを選択する(ファイルパスを入れても可)。
次は、データB.csvファイルを読み込みます。
読み込んだデータをデータテーブル”tableB”に格納します。
アクティビティ:Assignを挿入
計算式 i=0
(ループ処理をする際によく使います)
アクティビティ:Assignを挿入
計算式 列名=new list(of string)
再度、列名[リスト文字列型]の宣言をします(初期化してます)。
アクティビティ:Whileを挿入
条件式 i< tableB.Columns.Count
tableB.Columns.Countはデータテーブル”tableB”の列数を算出します。
ループ処理内容{
アクティビティ:コレクションに追加を挿入
アクティビティ:Assignを挿入
計算式 i=i+1
iの値を1ずつカウントさせる。
}
iの値がデータテーブル”tableB”の列数以上になったらループ処理終了。
アクティビティ:Input Dialogを挿入
上段にタイトルを入力
下段にラベルを入力
プロパティのオプションに配列を入力するとこんな感じになります。
列名はList型なので.ToArrayをつけることで配列型へ変換してます。
選択した列名は変数”データB_共通列”に格納します。
③データテーブルを結合
アクティビティ:Join DataTablesを挿入
入力データテーブル1にデータテーブル”tableA”を入力
入力データテーブル2にデータテーブル”tableB”を入力
出力データテーブルにデータテーブル”tableC”を新たに宣言して格納
列テーブル1に変数”データA_共通列”を入力
列テーブル2に変数”データB_共通列”を入力
今回は共通列の一致しているデータで結合するため操作を”=”とします。
結合型はLeftを選択
結合型とは
Inner:ルールに一致しない行はすべて、結果テーブルから削除されます。
Left:ルールに一致する値がない行の列には、null 値が挿入されます。
Full:結合条件の一致/不一致にかかわらず、すべての行が保持されます。
両方のデータテーブルの条件に一致しない行には、null 値が挿入されます。
④CSVに書き込む
アクティビティ:Write Csv Fileを挿入
上段にファイルの出力先、ファイル名を選択する(ファイルパスを入れても可)。
下段に出力するデータテーブルを入力
無事結合が完了し、Index Matchで計算したものと同じ結果が得られました。
UiPathを利用すれば、これまで手作業で繰り返していた業務も自動化できるため、大変便利です。個人でも無料で導入できるソフトですので是非利用してみてください。
楽しいRPAライフを