Excel操作

Uipath初心者です。

(Excel1)
|名前|性別|出身|
佐藤男東京
田中男大阪
鈴木女愛知

(Excel2)
A1:19961124佐藤男東京
A2:19971204田中男三重
A3:19980508鈴木女名古屋
とあります。

この時にExcel1の情報をもとにExcel2を修正し
(Excel2)
A1:19961124佐藤男東京
A2:19971204田中男大阪
A3:19980508鈴木女愛知
のようにしたいです。
もし可能であれば、教えていただきたいです。

@Jel

こんにちは、

サンプルのExcelファイルの入力と出力を共有できますか?

それはあなたに解決策を与えるのに役立つでしょう

[Datatableに参加]アクティビティを使用できます

ありがとう

可能です。
(Excel1)上のシートを「範囲を読み込み」アクティビティでDaTaTableとして保有し、
(Excel2)も同様に「範囲を読み込み」アクティビティでDaTaTableとして保有します。

「データテーブルの結合」アクティビティを使って、
(Excel1)側のDataTableの列と(Excel2)側のDataTableの列とを結合させ、
(Excel1)と(Excel2)の情報を一本化させます。

その後、必要な列を出力するようにしてあげればいいです。

ただ、名前、性別を結合キーとした場合、可能性として同名異人が出てきてしまう可能性がありますので、他に情報があれば、それも結合キーとして処理すると、精度はあがりますね。

ありがとうございます。
EXCELファイルのサンプルです。

Excel1.xlsx (8.8 KB) Excel2.xlsx (8.7 KB)

ありがとうございます。データテーブルの結合試してみます!

こんにちは。可能でしたがかなり手間でした。他に手数が少ない方法がありそうですが、記載しておきます。

まず、エクセル1と2を範囲を読み込みでデータテーブル変数にします。
table1にデータ列を追加して、繰り返し各行で名前+性別の列を作っておきます。
次にtable2を繰り返し各行にして、代入、instrで男までのINT32型の変数と代入2個目で同じ要領で、女までのまた別のINT32型の変数を作っておきます。
cnt=instr(str,”男”)って感じです。

条件分岐で、INT32型変数が0でなければ、代入でleft関数で変数までの値を取得し、row(0)へ入れます。row(0)=left(str,cnt)をthen側に入れます

もう一つのINT 32型の変数に対しても同じように条件分岐します。
ここまでで、間違っていると思われる出身が消えます。

このtable2にデータ列を追加します
列名を仮に生年月日としました
また繰り返し各行を使って、代入で、生年月日の列にleft関数で8桁入れます
row(0)にはremoveで8桁削除します
繰り返しを抜けたところで、データテーブルを結合を使います
結合型はinnerで、上からtable2、table1の順番です
出力は別の変数を使いました
列テーブル1には0を入れ、=で列テーブル2には名前+性別にした列名を入れました
上で新たに作成したデータテーブル変数を繰り返し各行にして、代入、row(0)= row(1)とrow(0)とrow(4)を足しました
生年月日+名前性別+出身、となります
データテーブルをフィルタリングで、出力列を0と指定します
範囲に書き込みで、終了となります。

長文失礼しました

こんにちは

やり方はいろいろあると思いますが、一例上げておきます。

dict = dt1.AsEnumerable.ToDictionary(Function(r) r("名前").ToString+r("性別").ToString , Function(r) r("名前").ToString+r("性別").ToString+r("出身").ToString)

という辞書を用意しておいて

row(0) = System.Text.RegularExpressions.Regex.Replace(row(0).ToString,"(?<=^\d{8}).+",Function(m)  dict(dict.Keys.Where(function(k) m.Value.Contains(k)).First))

で数字8桁で始まるレコードの内容を書き換えています。マスターに情報がない場合はそれ用に修正が必要です。

また @HANACCHI さんも記述されていますが、姓と性別だけですと、ユニークに特定できない場合がありますので、この点は十分注意が必要かと思います。

Sample20210406-1.zip (15.5 KB)

細かく教えていただきありがとうございます。試してみます!

ありがとうございます。とてもわかりやかったです。

恐縮なのですが、もう一点、教えていただきたいです。

今回は先頭の8文字を置き換えてると思うんですけど、これが空白を含めていたり、レコードによって先頭の文字数が変わっていた場合はどうなるのでしょうか。

こんにちは

条件が明確なら、それに応じた正規表現等を記述することになります。

わかりました。ありがとうございます。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.