111445
1
フィルターウィザードの使用において、A列が変数と一致した行を抽出したいのですが、対象行が複数あるにも関わらず1行しか抽出ができません。初歩的で申し訳ございませんがご教示いただけるとありがたいです。
(初めてでして質問の場所が誤っていたら申し訳ございません。)
・Sheet1のデータテーブルからH列に◯と記載がある場合、
A列(社名)を変数(companyname)に格納
・Sheet2の別のデータテーブルから、A列が変数(companyname)と一致する行を選択、
行の値をすべて別Excelファイルに転記をしたい
111405
(さん ペソ)
2


データテーブルをフィルタリングから
社名と一致する行を保持した、データテーブル
をExcelに書き込んでみてはどうでしょうか。
111445
3
本当にありがとうございます。
ご意見いただいた内容で試してみましたが、1行しか抽出されていません。
何が原因でしょうか。
変数である会社名(companyname)には、3つの名前を取得できていることを確認しています。(メッセージボックスで表示)
データテーブルをフィルタリング→範囲に書き込みをしたところ、出力後のエクセルには3つ目の社名を一致する行の情報しか記載がありませんでした。
恐れ入りますが何卒宜しくお願い致します。
111405
(さん ペソ)
4
会社名は配列やリストで複数あるという事なのでしょうか?
111445
5
ありがとうございます。
>会社名は配列やリストで複数あるという事なのでしょうか?
会社名は、stiring型にしております。
そこが問題でしょうか。
Sheet1のデータテーブルから
・H列に◯と記載がある列を代入アクティビティ(.select)で変数Select_rows(Datarow)に格納
・変数Select_rows(Datarow)から、A列(社名)を変数(会社名)に格納
しています。

途中から失礼します。
会社名をStringにすることは特に問題ではないと思います。
フィルタした結果を追加していくのに、データテーブルをマージというアクティビティを使用するとよいかと思います。
やり方はいくつかあると思いますが、フィルタを使った例をあげます。
※もともとはselectで抽出してdatarowの配列でやっているみたいですが。。。
変数として、
dtRead:シート1のデータ
dtData:シート2のデータ
dtResult:結果格納用(excel出力用)
dtFilter:シート1抽出作業用
dtWork:シート2抽出作業用
を使っています。
データは以下のファイルを使用して
companyData.xlsx (9.7 キロバイト)
結果は以下です。
result.xlsx (8.1 キロバイト)
ご参考まで。
こんにちは、
別方法になるかも知れませんがFor each rowを使わずに1代入使えば上記の課題をできると思います。
代入dt_filted = (from d1 in dt1.AsEnumerable join d2 in dt2.AsEnumerable On d1("会社名").ToString Equals d2("会社名").ToString Where d1("状態").ToString.equals("〇") Select d2).CopyToDataTable()
dt1はSheet1のデータテーブル, dt2はSheet2のデータテーブル
最後にdt_filtedをExcelファイルに書き込めば解決できると思います。
BlankProcess7.zip (30.0 KB)
参考まで添付ファイルをご覧ください。
1 Like