データテーブルの一部重複データチェック

下記のデータテーブルがあるとして、、

社員ID,開始月,終了月,コードA,金額
zzzz,20201201,20201231,00,100
yyyy,20201201,20201231,00,200
xxxx,20201201,20201231,00,100
zzzz,20201201,20201231,00,200

社員IDでソート後、金額以外が同じ値であればエラー出力したいと思います。

[ソート後]
社員ID,開始月,終了月,コードA,金額
xxxx,20201201,20201231,00,100
yyyy,20201201,20201231,00,200
zzzz,20201201,20201231,00,100
zzzz,20201201,20201231,00,200

上だと、3、4行目(社員ID zzzzの行)が金額以外が同じ値なのでエラーと出力したい。

uipathでどのように組めば良いのかお知恵を頂けないでしょうか。

for each rowで可能なのでしょうか?

よろしくお願い致します。

@x280 さん

エラー有無だけ判断すればよろしいなら、
あず「Remove Data Column」金額の列を外して 、
「Remove Duplicate Rows」で完全重複な行を外す時、
データテーブルの行が減少されたら、エラーありと判断できます。

1 Like

金額以外の項目をパイプ記号で連結したものをキーとして、dictionary型変数のキーに存在しなければ、キーと行番号を格納、キーに存在していたら、dictionary型の値には最初に現れた行番号が格納されているので、その値を利用して、『値 行に既にエントリーされています」などのメッセージが組み立てられますね。

for each row の中で上記のロジックを組みます。

1 Like

「for each row」のほうが直感的でシンプルだと思いますが、以下のようにLINQ式で書くこともできます。(SQLで言うと「COUNT GROUP BY」)

特定のキーで重複行をカウントしたデータテーブルを作成

dt_count = 
(From row In dt_origin.AsEnumerable
Group row By keyString = 
 (row("社員ID").ToString & row("開始月").ToString & row("終了月").ToString & row("コードA").ToString).Trim Into Group
Select dt_count.Rows.Add({keyString, Group.Count()})
).CopyToDataTable

このデータテーブルで行数2以上のデータを抽出して、ヒットしたらエラーと判断できるはずです。

参考までにコードはこちら
Sample_forumTopic_276515.xaml (15.1 KB)

ありがとうございます。
金額列を外すことで他の行との重複チェックができるようになりました。

ありがとうございます。
dictionary変数を使って、無事一部重複チェックが可能になりました。
このような使い方もできるのですね。勉強になりました。

1 Like

ありがとうございます。
LINQ式の方が for each rowより処理が早く終わりそうでした。
が、私の知識不足でLINQ式を使いこなせそうにないので、今回はfor each rowで処理しようと思います><

いずれLINQを勉強して使えるようにしたいと思います。

1 Like

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