DT1とDT2のエクセルの案件番号、コード、金額が一致した場合にのみDT2の指定のセルへ色を付けたい場合、どのように進めればいいでしょうか?
※また案件番号には大文字小文字の違いがあります。
こんにちは
アクティビティベースで実現するなら
まずJoin DataTable(データテーブルを結合)アクティビティで
DT2に対してDT1をLeft Joinします。
追加された列に注目すると、一致した行にはデータがあるので、その行番号を取得します
そこから色を付けたいセルのアドレスを生成し、FormatCellsアクティビティ等で色付けします。
早々にご回答頂きありがとうございます。
早速データテーブルを結合してみましたが、出力されたものをCSVに書き込むと
添付の様に何も残っておりませんでした。
これは案件番号の英字が大小文字で違いがある為でしょうか?
以上、お忙しいところ恐縮ですがご確認宜しくお願い致します。
こんにちは
※また案件番号には大文字小文字の違いがあります。
とは、大文字小文字を無視するということでしょうか?
そうであれば、単純なJoinではだめですので、大文字または小文字に変換して比較するなどになります。
行数が少なければ、ForEachExcelRowとForEachRowの2重ループの方が記述が簡単になるかと
思いますので、以下お試しください。(スループット的に問題になりそうでしたら、LINQなどを
組み合わせることになると思います)
Row1("案件番号").ToString.ToLower=Row2("案件番号").ToString.ToLower AndAlso Row1("コード").ToString=Row2("コード").ToString AndAlso Row1("金額").ToString=Row2("金額").ToString
Sample20230407-1aL.zip (11.1 KB)
ご回答ありがとうございます。
やはりそうでしたか。
因みに案件番号の英字は無視して英字後の数字のみを比較するなどはできますでしょうか?
そうすると複雑になってしましますかね?
※案件番号の英文字は頭から3桁などの法則があります。
実際の動作ではDT1のデータが100案件程でDT2のデータが1000件程入力されています
DT2のデータの中にDT1と同一データがあった場合にDT2の指定セルに色を付けるという様な動作にしたいと思っております。
行数は多くなってしますので2重ループだと動作は重くなってしまいますかね?
UiPath初心者の為、初歩的な質問であったら申し訳ございません。
以上、ご確認宜しくお願い致します。
こんにちは
桁数固定ならString.Substringメソッドを、不定ならRegex.Matchメソッドで可能です。
実際の動作ではDT1のデータが100案件程でDT2のデータが1000件程入力されています
DT2のデータの中にDT1と同一データがあった場合にDT2の指定セルに色を付けるという様な動作にしたいと思っております。
行数は多くなってしますので2重ループだと動作は重くなってしまいますかね?
どのくらいのスループットを要求するかもにもよりますが、Debug実行時は少々時間が必要になるように思えます。
高速化の手法はいくつか考えられますが、例えば、まずはdt1のループをなくして
あらかじめ比較が必要な項目の配列またはリストを作成しておき、これをContainsメソッドで比較するようにする等が考えられます。
具体的には例えば以下のようにします。
arrKey = dt1.AsEnumerable.Select(Function(r) String.Join(Chr(9),{System.Text.RegularExpressions.Regex.Match(r("案件番号").ToString(),"\d+$").Value,r("コード").ToString(),r("金額").ToString()})).ToArray()
条件式
arrKey.Contains(String.Join(chr(9),{System.Text.RegularExpressions.Regex.Match(Row2("案件番号").ToString(),"\d+$").Value,Row2("コード").ToString ,Row2("金額").ToString}))
ご回答ありがとうございます。
アドバイス頂いた通り、代入に
arrKey = dt1.AsEnumerable.Select(Function(r) String.Join(Chr(9),{System.Text.RegularExpressions.Regex.Match(r(“案件番号”).ToString(),“\d+$”).Value,r(“コード”).ToString(),r(“金額”).ToString()})).ToArray()
と入力してみましたが
コンパイルエラーが発生したしまいます。
型”Stringの1時配列の値を”Storing”に変換できません”
となってしまいますが何が間違っているのでしょうか?
arrKeyの型はString配列になっていますでしょうか?
はい。なっています。
スクリーンショット共有可能でしょうか?
なるほど、エラーが消えました。
ありがとうございます。
次に進めてみます。
テストのDT1/2では動作が正常にされるのを確認したのですが
実際のエクセルに落とし込むと動作がうまくいかず…
そこでご教授ください。
・金額の照合をする際に片方のエクセルではセルの書式が標準で片方のエクセルではセルの書式が通貨となっており数字に「,」が入っており、それのせいで正常に照合されないのでしょうか?
(案件番号のみでは正常に動作することを確認しております)
・照合結果が一致した列のセルに書き込みを行いたいのですが指定する場合はどの様にすればいいでしょうか?
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.