日付でフィルタリングする方法

UiPath初心者です。
日付でフィルタリングをしたいのですが、できずに困っています。

やりたいことは、Excel上のデータに対して日付(正確には日付+時刻のデータ)で
フィルタをかけて、別のExcelシートに抽出するということをしたいです。

例)
A列(日時) B列 C列
2019/02/07 10:50:47 A X
2019/04/03 20:56:02 B Y
2019/08/11 13:13:15 C Z

上記のようなExcelデータを変数Datatable1に格納後、
A列を例えば2019/04/01 00:00:00以降のデータを抽出し
別のExcelに転記するためにDatatable2に格納したいのですが、
"データフィルタリング"ではどうも日付型でフィルタリングができませんでした。

select構文やfor each rowにトライしていますが、どうしてもできず、
よろしくお願いします。

1 Like

以前に数値でフィルタが掛けられないって事象に遭遇しました。
その時は、対象列の値をCINTして、同じ列に代入するようにして、列の型をInt32として認識させるようにしました。

この場合も同様に、A列の値をDateTime型に変換した結果をA列に書き戻すとフィルタ掛けられるかも知れません。

「範囲を読み込む」アクテイビティで読み込んだDataTableの列の属性は、GenericValue型として考えた方がいいかもしれませんね。

※日付の型変換はDateTime.Parse(A列.ToString)で出来ると思います。

早速ありがとうございます!やってみます!

書き戻す方法ですが、
for each rowで代入を使って下記のように書いてみたのですが、
row.Item(“A列名”)=DateTime.Parse(row.Item(“A列名”).ToString)
フィルタリングしましたが、データ数0になるのでうまくいっていないようです。

代入ではだめなのかもと思いますが、
書き戻す方法をもう少し教えていただけますでしょうか。
すみません、よろしくお願いいたします。

自分で作ってみました。

大変申し訳ないです。
書き戻す方法でなくてもできました!

「データテーブルをフィルタリング」アクティビティで、
列に"日付時刻"で、値に、[New DataTime(y,M,d)でOK!
列に"日付時刻"で、値に、[New DataTime(y,M,d,H,m,s)でもOK!

ですので、A列 >= New DateTime(2019,4,1,0,0,0)で行けると思います!

2 Likes

本当にありがとうございます!!
すぐ試してみますが、
本日定時退社なのでご連絡明日になります。

1 Like

昨日はありがとうございました。
教えていただきました方法でできました!

今までなぜできなかったかと言いますと、
先の質問にはExcelデータと書いてしまったのですが、
実際はCSVデータを読み込んでいました(同じだと思っていたのですが違うのですね)。
読み込んだCSVを一旦Excelに読み込ませ、再度Excelから読み込めば、
A列 >= New DateTime(2019,4,1,0,0,0)でいけました。
サンプルのデータでは。。

ここでもうひとつ問題が出てきてしまいました。
もう1点お聞きしてもよろしいでしょうか。図図しく申し訳ございません。

実は実際のデータは下記のようなUTCの時刻表示がCSVに記載されており、
2019-08-28T06:51:19.6849046Z
Excel上でデータ→テキスト/CSVインポート→ファイル形式:UTF-8で読み込めば
2019/08/28 15:51:20
上記のように変換されて表示できていたのですが、
UipathのRead CSVでEncoding "UTF-8"で読み込んでも、時刻は
2019-08-28T06:51:19.6849046Z
この表示のままになってしまい、データフィルタしたときに時刻として認識してくれないのですが、
これを日付型として認識させるにはどのようにすればいいでしょうか。

CSVですと、文字列として扱われますので、今度こそ、DateTimeの型変換が必要ですね。

CSVファイル上の日付時刻は、「2019-08-28T06:51:19.6849046Z」のような文字列になっているのですね?

COOLなやり方は他の方が教えてくださると思いますが、私だったら。。。

"."ピリオドまでの文字列を切り出し、そこから"T"を半角空白にしてから、DateTime.Parseするかなぁ…

日付関係は、やはり難しいですねぇ。。。

1 Like

読み込まれた当該書式の日時をdateStrとした場合、Convert.ToDateTime(dateStr)とすることで、DateTime型に変換できました。
このDataTime型に変換したものをコネコネすればいろいろとできそうな気がします。

2 Likes

@cheez_RPAさん
こんな方法もあるんですか!勉強になりました。

@MihoKataokaさん
色んな方がいろんな知識をお持ちですので、今後ともよろしくお願いしますね。

2 Likes

HANACCHI様、cheez_RPA様

Convert.ToDateTimeで、できました!!
HANACCHIさんのExcelに書き戻すアイデアも使いました。

CSV読込→DataTable上で日付の書式変換(Convert)して同じDataTableに書き戻し
→新規Excelに一旦書き出し→ExcelをReadRange→データフィルタリング

という流れに最終なりました。

皆様のおかげで課題が1つクリアできそうです。
調べてもどうしてもわからなかったので、
思いきってフォーラムを初めて利用させていただきました。
こんなに早く回答いただけて本当に助かりました。
今後ともぜひよろしくお願いします。
ありがとうございました!!!

3 Likes

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