mm.mm
(mm)
1
度々お世話になっております、ありがとうございます。
複数ファイルのデータで、ある条件に一致したデータだけを
1つのアウトプットファイルに書き込んでいくという処理を作りたいです。
ここでは、1つのフォルダ内に3つファイルがあるので、処理は3回繰り返すことになります。

①同一フォルダ内にあるファイルを1つ取得
②1行ずつ読み込み、D列のセルにフラグがついている&E列のセルにメールアドレスが記入されていればOK
③OKならば、その行をOutputファイルに書き込み
この①ー③の処理を3つのファイルを読み込むまで繰り返していきます。
そして、Aチームのデータはこうなっています。
(この場合、Outputファイルに書き込めるのは3行)
Bチーム
(この場合、Outputファイルに書き込めるのは2行)
Cチーム
(この場合、Outputファイルに書き込めるのは2行)

それなのに、Outputファイルの結果はこうなります。
この結果から見るに、おそらく
Aチームの処理⇒Outputファイルへ書き込む時に「全件」書き込みしている
Bチームの処理⇒Outputファイルへ書き込む時に「Aチームの結果の上から書き込みしている」
Cチームの処理⇒Outputファイルへ書き込む時に「Aチームの結果の上から書き込みしている」
・・・ということではないか?と推測できました。
そこで今回は、
①条件分岐が効くようにしたい
②条件に一致した行だけをOutputファイルに書き込めるようにしたい
・・・ということを知りたいです。
多分、一番下の「範囲に書き込み」アクティビティで”A1"を指定しているのがダメなのかな?とは思うのですが、
そこを空白にしても同じでした。
また、条件分岐でTrueになった時点で読み込んだ行をそのまま書き込むことが
できないのは何がいけないのでしょうか?
よろしくお願いいたします><
HANACCHI
(はなっち!UiPath Japan MVP 2019-2022)
2
範囲を読み込みの際のDataTableの変数は、
1)EXCELアプリケーションSCOPEのまでで初期化する(代入アクティビティで、New DataTableとする)
2)範囲を読み込み後、別のDataTableに、「データテーブルをマージ」してあげる(変数タブで、新たな変数として用意し、代入アクティビティで、NEWDT ← New DataTableとしておく)
こうすると、3つのEXCELファイルを処理した後のNEWDTに、3つのEXCELファイルの情報が展開されます。
そこからおもむろに「データテーブルのフィルタ」でD列名が”●"で且つE列名がNot IsEmpty(だったっけ)を設定すると、出力データテーブルに、結果が残ります。
mm.mm
(mm)
3
すみません、 初心者にとっては、言ってる意味がさっぱり分かりません💦
shinji
(Shinji Miyagi / みやぎ)
4
また、条件分岐でTrueになった時点で読み込んだ行をそのまま書き込むことができないのは何がいけないのでしょうか?
気づかれている通り、今はABCを重ね合わせています。
イメージで言うとこんな感じです。

なのでループの仕方というか処理の組み立て方を変える必要があります。
イメージで言うと、こういうふうにする感じです。

shinji
(Shinji Miyagi / みやぎ)
5
ハナッチさんの言っているのは、こういうことだと思います。
また、今作られている「Directory.GetFiles(xxx)」のコレクション各要素ループに近い方法として
という実現方法もあると思います。
poke
6
こんにちは。
いきなりですみません。
私なら条件分岐は使わないでデータテーブル変数で処理をします。
はなっちさんの方法でいけば
ファイルのための繰り返し処理
Excelアプリケーションスコープ
範囲を読み込み
データテーブルをマージ
繰り返し処理終わり
データテーブルをフィルタリング
範囲に書き込む
これで条件に合致した一つのデータになるかと思います。
outputのデータテーブル変数のために、繰り返し処理の前に、NewDATATableの代入を入れてください
別の方法として
ファイルの繰り返し処理
Excelアプリケーションスコープ
範囲を読み込み
データテーブルをフィルタリング
データテーブルをマージ
繰り返し処理終わり
範囲に書き込む
でいけるかと思います。
この場合もNew DATA Tableの代入は繰り返し処理の前に入れてください
Excelとなると、データテーブル系のアクティビティはよく使用するので、色々と調べてみると良いかもしれませんね。
1 Like