データテーブルを結合後の出力内容について

2つのExcelを番号で結合して、その内容の一部を片方のExcelに書き込む作業をしています。
結合内容を確認していたのですが、結合の種類をInner、Left、Fullのどれに変えても、フィルターをかけてみてもDataTableをExcelに書き出してみるとどれも同じに見えるのですが、これは結合に失敗しているということでしょうか?

こんにちは
どのようなデータテーブルに対して、どの列をキーにしたか、とその結果を共有いただくと良いかと思います。

AのExcelのL列(契約番号(連番))とBのExcelのJ列(契約連番)をイコールで結合しています。
結合した結果はBのExcelの結合結果シートです。
よろしくお願いいたします
データ結合.zip (288.1 KB)

InnerJoinで期待する結果は得られると思います。

ありがとうございます。
何らかの原因で元々の方は上手くいってなかったようです。
教えていただいた方法でできたと思いますが、やはり結合した内容を書き出そうとするとうまくいきません。
そもそも私がしようとしていることが合っているのかを確認したいのですが
AのExcelのF列(納品年月日を)BのExcelのP列に入力したい場合、
AとBを結合して、Excelファイルを使用でBのExcelを指定して、セルに書き込みで書き込む内容のところに結合した変数(dt結合)を使用して、「dt結合.Columns(“納品年月日”)」を入れるという方法で合っていますか?

これはDataColumnが返りますので、実データは入りません。

結合前のDataTableの元となるワークシートに書き込む要件があるようでしたら、
InnerJoinではなく、各行ごとに対象有無チェック、必要な情報を取得・書き込みのロジックを入れいるか、
あるいはBから読み込んだデータテーブルに行番号列を追加して、InnerJoin後、その情報を元に書き込むべきアドレスを割り出してから書き込む方法等が考えられます。

結合は使わない方が良いということですね。
前者の方が良い気がしますが、アクティビティで言うとデータテーブルを検索⇒セルに書き込みという感じでしょうか?

最終的にB.xlsxに対して書き戻すのであれば、B.xlsxに対して繰り返し(EXCELの各行)アクティビティで繰り返し、各行の当該情報をA.xlsxから読み込んだDataTableに対してマッチング(データテーブルを検索アクティビティでも良いかと思います。)、必要データを取得して、CurrentRow("書き戻す列") = 値 のようにすれば良いかと思います。

データテーブルを検索アクティビティの使い方を調べて入れてみましたが、認識が合っているか確認させてください。
今回の場合、ルックアップを実行するデータテーブルでBのExcelを指定して検索する列もExcel内で指定していますが合っていますか?
添付の画像のようになっているんですが、列と列番号のところには何を入れたら良いのか分からないので、何が対象になるのか教えていただけますでしょうか?

DataTable操作系のアクティビティを使うのであれば、一旦ワークシートの中身を変数として取り込んで処理したほうが良いかと思います。
なお列、列名、列番号はいずれか1つのみが設定できます。(複数することはできません)

公式ドキュメントを確認すると良いかと思います。

あるいはEXCELのワークシートを直接操作したいのであればVLookUpのアクティビティ等もありますので、こちらを使う手もあります。

ありがとうございます。
色々方法が出てきて、どれが良いのか分からなくなってきてしまいました💦
過去の質問を見ていると https://forum.uipath.com/t/excel-vlookup/708567
こちらの投稿が私の実現したいことと似ているので、Dictionaryを使用する方法が良いのではないかと考えています。
今回私が使いたいのは文字列ではなく数字なので使えないでしょうか?

私の場合はAのExcelの契約連番をキーにして、BのExcelの契約連番を探して、対象があればP列にAのExcelの納品年月日を入れようとしています。
同じように作ってみましたが、うまく書き込めず数値だからかなと考えています。

整数を文字列化してもよいですし、整数のままキーとしても使えます。例えばDictionary<Int32, DateTime>のような型にすればこちらの方法でも可能です。

このあたりは要件:どの程度の数量をどの程度の時間内に処理しないといけないか

保守性:これをメンテナンスする人が容易に保守できるか

といった点から適切なロジックを選択する必要があるかと思います。

ちなみにDictionary+LINQ使った実装例は下記になります。(一旦その他欄に書き出しています)

Sample
Sample20241226-2.zip (571.0 KB)

ありがとうございます。
大変助かりました。
最後に質問させていただきたいのですが、ワークブックの範囲を読み込みとExcelの範囲を読み込みを使い分けておられますが、それはなぜでしょうか?
AのExcelはワークブックの方のアクティビティを使われていたので気になりました。
処理速度の問題でしょうか?

実際には互換性の問題や、パフォーマンスの問題等を総合的に評価する必要がありますが、今回は単にAの方はアクティビティ一つで済むから、Bの方は書き戻しが発生するので、念のため互換性優先でEXCELアプリケーションを経由する方法を採りました。一貫してEXCELアプリケーションを通じた方法でも問題ないと思います。

勉強になります。ありがとうございました。

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