データテーブルのC列は、数字が入っています。
このC列の数字が1より小さい行のみ抽出したいです。
「データテーブルをフィルタリング」アクティビティを使おうとしました。
しかし、C列はstringの数字なのでアクティビティの中の条件を[“C列” < 1]にしても
正しく動作しませんでした。
こういった場合、どのようにフィルタすればいいでしょうか?
ご指導よろしくお願いします。
いまいち状況がつかめていないのですが、読み込むExcelが文字列書式になっているから
絞りこめないということでしょうか?
Excelの書式変更せずにやるとしたら
①データテーブルとして取り込んだあとにC列のInt型に変換した列を追加する
②For Eachでループして対象外の行を削除する
となると思います。
難易度的にはどっちもどっちですが、①の方が簡単(アクティビティ2個)だと思います。
こんにちは
C列の内容が整数の文字列なら、以下で可能かと思います。
dt = dt.AsEnumerable().Where(function(r) CInt(r("C列").ToString())<1).CopyToDataTable()
データテーブルを作成するときC列の型をint32にして作っておけば数字でのフィルタが効くと思います。
うわ、これは素晴らしいですね
このやり方は思いつきませんでした・・・
ytakayama様
いつもご指導ありがとうございます。
①の方法は、思いつきませんでした。わたくしの引き出しを増やすことができました。
ちなみにアクティビティ2個を教えていただければ幸いです。
②の方法は、わたくしも最初とりかかろうとして、時間がかかると思い、躊躇しておりました。
@196006 様
ちなみにアクティビティ2個を教えていただければ幸いです。
以下の2つかと思います。
①「データ列の追加」アクティビティ
→DTに新しい列を作るために使用
②「繰り返し(各行)」アクティビティ
→DT1行ずつにC列の値を新しい列に移行するために使用
よく考えると②の繰り返しの中で「代入」アクティビティを使用するので
3つといえるかもしれないですね。
(row(“新しい列名”) = Ctype(row(“C列の名前”), 変換したい型)ですかね。)
ytakayama様
ご回答ありがとうございます。
とても参考になりました。
使わせていただきます。
「代入」アクティビティで、列の定義を変換してSELECTする方法もあるかと思います。
drows = dt.Select("Convert(C列, 'System.Decimal') < 1")
参考まで。
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.