データテーブルの特定カラムの数値でフィルタをする方法

データテーブルのC列は、数字が入っています。
このC列の数字が1より小さい行のみ抽出したいです。
「データテーブルをフィルタリング」アクティビティを使おうとしました。
しかし、C列はstringの数字なのでアクティビティの中の条件を[“C列” < 1]にしても
正しく動作しませんでした。
こういった場合、どのようにフィルタすればいいでしょうか?
ご指導よろしくお願いします。

いまいち状況がつかめていないのですが、読み込むExcelが文字列書式になっているから
絞りこめないということでしょうか?
Excelの書式変更せずにやるとしたら

①データテーブルとして取り込んだあとにC列のInt型に変換した列を追加する
②For Eachでループして対象外の行を削除する

となると思います。
難易度的にはどっちもどっちですが、①の方が簡単(アクティビティ2個)だと思います。

1 Like

こんにちは

C列の内容が整数の文字列なら、以下で可能かと思います。

dt = dt.AsEnumerable().Where(function(r) CInt(r("C列").ToString())<1).CopyToDataTable()
2 Likes

データテーブルを作成するときC列の型をint32にして作っておけば数字でのフィルタが効くと思います。

うわ、これは素晴らしいですね
このやり方は思いつきませんでした・・・

1 Like

ytakayama様
いつもご指導ありがとうございます。
①の方法は、思いつきませんでした。わたくしの引き出しを増やすことができました。
ちなみにアクティビティ2個を教えていただければ幸いです。
②の方法は、わたくしも最初とりかかろうとして、時間がかかると思い、躊躇しておりました。

@196006

ちなみにアクティビティ2個を教えていただければ幸いです。

以下の2つかと思います。

①「データ列の追加」アクティビティ
→DTに新しい列を作るために使用

②「繰り返し(各行)」アクティビティ
→DT1行ずつにC列の値を新しい列に移行するために使用

よく考えると②の繰り返しの中で「代入」アクティビティを使用するので
3つといえるかもしれないですね。
(row(“新しい列名”) = Ctype(row(“C列の名前”), 変換したい型)ですかね。)

1 Like

ytakayama様
ご回答ありがとうございます。
とても参考になりました。
使わせていただきます。

「代入」アクティビティで、列の定義を変換してSELECTする方法もあるかと思います。

drows = dt.Select("Convert(C列, 'System.Decimal') < 1")

参考まで。

1 Like

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