複数ファイルで条件分岐で一致した行を1行ずつ書き込む

度々お世話になっております、ありがとうございます。

複数ファイルのデータで、ある条件に一致したデータだけを
1つのアウトプットファイルに書き込んでいくという処理を作りたいです。

ここでは、1つのフォルダ内に3つファイルがあるので、処理は3回繰り返すことになります。
image

①同一フォルダ内にあるファイルを1つ取得
②1行ずつ読み込み、D列のセルにフラグがついている&E列のセルにメールアドレスが記入されていればOK
③OKならば、その行をOutputファイルに書き込み

この①ー③の処理を3つのファイルを読み込むまで繰り返していきます。

そして、Aチームのデータはこうなっています。
(この場合、Outputファイルに書き込めるのは3行)

Bチーム
(この場合、Outputファイルに書き込めるのは2行)

Cチーム
(この場合、Outputファイルに書き込めるのは2行)
image

それなのに、Outputファイルの結果はこうなります。

この結果から見るに、おそらく
Aチームの処理⇒Outputファイルへ書き込む時に「全件」書き込みしている
Bチームの処理⇒Outputファイルへ書き込む時に「Aチームの結果の上から書き込みしている」
Cチームの処理⇒Outputファイルへ書き込む時に「Aチームの結果の上から書き込みしている」
・・・ということではないか?と推測できました。

そこで今回は、

①条件分岐が効くようにしたい
②条件に一致した行だけをOutputファイルに書き込めるようにしたい

・・・ということを知りたいです。

多分、一番下の「範囲に書き込み」アクティビティで”A1"を指定しているのがダメなのかな?とは思うのですが、
そこを空白にしても同じでした。

また、条件分岐でTrueになった時点で読み込んだ行をそのまま書き込むことが
できないのは何がいけないのでしょうか?

よろしくお願いいたします><

範囲を読み込みの際のDataTableの変数は、
1)EXCELアプリケーションSCOPEのまでで初期化する(代入アクティビティで、New DataTableとする)
2)範囲を読み込み後、別のDataTableに、「データテーブルをマージ」してあげる(変数タブで、新たな変数として用意し、代入アクティビティで、NEWDT ← New DataTableとしておく)

こうすると、3つのEXCELファイルを処理した後のNEWDTに、3つのEXCELファイルの情報が展開されます。

そこからおもむろに「データテーブルのフィルタ」でD列名が”●"で且つE列名がNot IsEmpty(だったっけ)を設定すると、出力データテーブルに、結果が残ります。

すみません、 初心者にとっては、言ってる意味がさっぱり分かりません💦

また、条件分岐でTrueになった時点で読み込んだ行をそのまま書き込むことができないのは何がいけないのでしょうか?

気づかれている通り、今はABCを重ね合わせています。
イメージで言うとこんな感じです。
image
なのでループの仕方というか処理の組み立て方を変える必要があります。
イメージで言うと、こういうふうにする感じです。
image

ハナッチさんの言っているのは、こういうことだと思います。

また、今作られている「Directory.GetFiles(xxx)」のコレクション各要素ループに近い方法として

という実現方法もあると思います。

こんにちは。
いきなりですみません。
私なら条件分岐は使わないでデータテーブル変数で処理をします。
はなっちさんの方法でいけば

ファイルのための繰り返し処理
Excelアプリケーションスコープ
範囲を読み込み
データテーブルをマージ
繰り返し処理終わり
データテーブルをフィルタリング
範囲に書き込む

これで条件に合致した一つのデータになるかと思います。

outputのデータテーブル変数のために、繰り返し処理の前に、NewDATATableの代入を入れてください

別の方法として

ファイルの繰り返し処理
Excelアプリケーションスコープ
範囲を読み込み
データテーブルをフィルタリング
データテーブルをマージ
繰り返し処理終わり
範囲に書き込む

でいけるかと思います。
この場合もNew DATA Tableの代入は繰り返し処理の前に入れてください

Excelとなると、データテーブル系のアクティビティはよく使用するので、色々と調べてみると良いかもしれませんね。

1 Like