複数行にわたる通勤ルートを、他ファイルに1行で記載する。

初心者です、お力をお貸しください。
画像のようにExcel内(ファイル①)の通勤ルートを、
他Excel(ファイル②)に反映させたいと考えています。

ファイル①にあるデータは、列11/列12のように目的地まで各々乗り換えがあるたびに
行が変わっています。
対してファイル②には、乗り換えを含めたルートを目的地まで1行で記載しています。

この場合の処理としては、
1.ファイル①をデータテーブルで出力
2.出力したデータテーブルをファイル②に、氏名or社員番号で紐づけ
3.紐づけされたデータを、J列以降から目的地まで横並びで反映させる
を想定しています。

方法としては、
2でLookUp、3で繰り返し処理を行うことを想定しています。
しかし、具体的にどう紐づけて繰り返し処理させるかがイメージができていないです。
どのようなアクティビティを組めば良いか教えていただけますでしょうか?

こんにちは

基本的には、特定のキーでGroupingして、それをもとに表を出力します。
(技術的にはLINQのGroupByを使うか、Dictionary等を使います。)

サンプルのデータと期待する結果をファイルとして共有できますでしょうか?

@Yoichi さん
早速のリプライありがとうございます。
こちらに添付しておきます。
尚、色分けは便宜上見やすくしているだけで、
実際の作業では必要ありません。
また、もしVB以外での方法もあれば教えていただければ幸いです。
よろしくお願いします。
サンプルのデータ.xlsx (9.6 KB)
期待する結果.xlsx (10.0 KB)

こんにちは

一例として以下いかがでしょうか

dtResult = dt.AsEnumerable.GroupBy(Function(r) r(4).ToString).Select(Function(g) dtResult.Clone.LoadDataRow({g.Key,g.Key,g.First().item(0),g.First().item(5),"","","","",""}.Concat(g.SelectMany(Function(r) r.ItemArray.Skip(10))).ToArray,False)).CopyToDataTable

Sample20220830-1.zip (18.8 KB)

同一名ヘッダーが許容されないので、ヘッダー名を少し変更しています。

ご対応ありがとうございます。
望みたい通りの結果を得ることができました。
また、何点か質問いたします。

1.VBで定義している用語(?)を使う目的について
以下のような認識で大丈夫でしょうか?
Clone:「期待される結果」に指定されている配列を「result」にコピーするため
AsEnumerable:「サンプルのデータ」ファイル内にある拡張メソッドを呼ぶため

2.「サンプルのデータ」で1人あたりの通勤経路が4行以上になる場合の対応
“~LoadDataRow({g.Key,g.Key,g.First().item(0),g.First().item(5),”“,”“,”“,”“,”“}.~"の
「item(5),”“,”“,”“,”“,”“」を5から7以上、
「”"」を増やした数に合わせるイメージで大丈夫でしょうか?

3.紐づけている項目
"dt.AsEnumerable.GroupBy(Function(r) r(4).ToString)~"とあることから、
社員番号で正しいでしょうか?

4.「期待される結果」への反映方法
「result」で出力されたものを、「期待される結果」にはどのよう反映すれば良いでしょうか?
「期待される結果」には変更があったデータは上書きし、
そうでないものは従来のデータのまま残す運用を想定しています。

こんにちは

Clone:「期待される結果」に指定されている配列を「result」にコピーするため

DataTableの構造だけを取得しています(中身は取得していません)

AsEnumerable:「サンプルのデータ」ファイル内にある拡張メソッドを呼ぶため

DataTableに対していわゆるLINQと呼ばれるメソッドを使うためのものです。

「”"」を増やした数に合わせるイメージで大丈夫でしょうか?

これは期待する結果の支給月数~1か月の列に相当しますので、一人当たりの通勤経路数とは無関係です。現在通勤経路の列が10まで定義されているので、10まではこの式で処理できると思います。

"dt.AsEnumerable.GroupBy(Function(r) r(4).ToString)~"とあることから、
社員番号で正しいでしょうか?

元データに列の意味が分かる表現がありませんので、こちらでは正確にはわかりません。0ベースの4列目。「列5」に相当します

「result」で出力されたものを、「期待される結果」にはどのよう反映すれば良いでしょうか?
「期待される結果」には変更があったデータは上書きし、
そうでないものは従来のデータのまま残す運用を想定しています。

要件が異なりますので、このままでは使えません。
例えば、行単位で管理するのであれば、今回更新対象となる古いデータは元データから
削除しておいて新しいデータをマージする、等が考えられます。

ご回答ありがとうございます。
またお返事遅くなってすみません。
あれから自力で「result」で出力されたものを、「期待する結果」に反映しようとしましたが、苦戦しております。

運用としては
1.「result」に「期待する結果」のE~I列も反映させる
2.「result」で抽出された社員を更新対象とし、「期待する結果」で更新対象となる社員が見つかったら行ごと削除する
3.「期待する結果」に「result」で抽出されたデータを行ごと反映する

を想定しています。
UiPathでそのような方法は可能なものでしょうか?

こんにちは
少し雑ですが書き直してみました。ご確認ください。

Sample20220830-1v2.zip (33.1 KB)