データテーブルをフィルターが意図した通りに動かない

いつもお世話になっております。

Excelから「範囲を読み込み」でデータを読み込んだデータテーブルを、「データテーブルをフィルター」アクティビティを使用して複数条件で行をフィルタリングし、さらに指定した列のみ保持したいです。
クラシックの「範囲を読み込み」で「表示形式を維持」を指定・またはモダンの「範囲を読み込み」で書式「null」を指定してデータを読み込んだ場合は意図した通りにフィルタリングできるのですが、
クラシックの「範囲を読み込み」で「表示形式を維持」をオフにして読み込むと、読み込んだ時点ではデータテーブルの中身があるのですが、フィルタリングするとデータがすべてなくなります。
「表示形式を維持」すると読み込みにとてつもなく時間がかかるため、できれば後者で実現したいです。
何か方法があればご教授ください。

こんにちは

データテーブルをフィルタリングアクティビティは、フィルターする型について、元のエクセル上での形式に大きく影響を受けます。
そのため、このあたりの型がアクティビティが想定する型通りでない場合は、他の方法:例えばLINQやDataTable.Selectあるいは規模が小さければForEachRow等のループを使う等になります。

もし具体的なデータ(インプットとアウトプット)を共有可能でしたら、上記の式の案を記載できると思いますので、検討いただければと思います。

SAMPLE.xlsx (44.2 KB)
一部内容を編集したファイルを添付します。実際のファイルは5000行ほどあります。
指定したいフィルタは以下です。
・D列(マッチング結果)に「マッチング失敗」が含まれる
・F列(サジェスト表示順)が「1」
上記を適用し、B・C列のみをデータテーブルに出力したいです。
よろしくお願いいたします。

こんにちは

この条件でしたら、フィルターデータテーブルで動作しそうですが....

image

BC列のみにすると中身がわからなくなるので、一旦全列出力しています
(保持するカラム列を指定すると、B,C列だけにすぐ可能です)
一度以下お試しください。

Sample20230721-2L.zip (44.3 KB)

いちおうLINQ版もupしておきます。

arrDr = dt.AsEnumerable.Where(Function(r) r("マッチング結果").ToString.Contains("マッチング失敗") AndAlso r("サジェスト表示順").ToString="1").ToArray()

Sample20230721-2Lv2.zip (44.5 KB)

サジェスト表示順の条件を「1」ではなく「“1”」と文字列扱いにしていたため、当てはまるものがなく0件になっていたようです。「1」にすると意図した通りにフィルタリングできました。ありがとうございます。

余談ですが、クラシックの「範囲を読み込み」で表示形式を維持をOFFにし、範囲を「“”」ではなく必要な部分「B:F」とした場合、読み込みには時間がかからないのですがフィルタリングにとても時間がかかりましたので、「“”」で全体を読み込んだ後フィルタリングすることにしました。

1 Like

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