1117
1
たくさん質問してしまいすみません。
内容が異なるため別スレで投稿させていただいております。
例えば、
A1→11/30
A2→12/31
A3→1/31
A4→2/29
このようにデータが入っているとして、人間が見たら現在は1月ですので11/30や12/31というのは過去であることがわかりますが、ロボットでは未来(2020年)の11/30や12/31になってしまいます。
また、現在の月がA1に来るときもあれば、最終行に来るときもあります。
このような時、現在の該当月より上のデータが過去であると認識させるための方法はありませんか?
tkgsn146
(Gobun Takagi)
2
@1117 さん
大変難しい問題ですね。人間の場合、融通を聞かせた推測が成り立ちますが、コンピューター(含むRPA)は、基本的に「馬鹿正直に与えられたデータを処理する」動作になります。
そこで人間が何かしらのロジック(考え方)をコンピューターに教えることで対応するしかないのですが、 今回の場合だと、次のような感じでしょうか。
- 全部の行を順番に見て、「月」が現在の月と一致する行を探す(NOTE:上から見るのと下から見るの、どちらも考えられますが、処理の結果が異なる可能性があるので注意が必要です)
- そこから遡って上にある行は過去と判断し、12月を跨いだところで「年」の部分に去年の値を設定
- 逆に今月より先は今年と判断しつつ、12月を超えたら翌年の日付を振る
といった処理を、ワークフローを作成して行う必要が出てくるかな、と思います。
1 Like
HANACCHI
(はなっち!UiPath Japan MVP 2019-2022)
3
多分、EXCEL内部では年が存在していて、表示形式で月/日になっているものと考えます。
一度表示形式を変えてみてから考えてみたら如何でしょう?
1117
4
@HANACCHI 様
実は、元々のデータは1/1-1/10や1/11-1/20といった文字列のデータになっていて、Split関数で後ろの1/10や1/20だけを抽出し現在の日付と比較しています。
1117
5
ご回答ありがとうございます。
元々文字列のデータが入っているため、一つ目の「現在の月と一致する行を探す」というのを行うために、日付列を1行ずつ上から比較し、Datediff関数を使用し、返される値がプラスになったら処理を行おうとしていました。
このとき、12/31などは去年の為マイナスにならなければいけないのですが、プラスの値になってしまうために比較ができずの質問でした。
言葉足らずですみません、、
tkgsn146
(Gobun Takagi)
6
@1117 さん
いったん、DateTime型に変換した上で、
変数.AddMonth(1)
変数.AddMonth(-1)
で月を加算・減算するとかどうでしょうか。
(これだと年の繰り上がり・繰り下がりは自動でやってくれます)
cheez_RPA
(いわさき りょうすけ (UiPath Japan MVP 2019 - 2021))
7
@tkgsn146 さんも書かれていますが、実際に入力が想定されるデータの特徴から、決め打ちでいくしかないのではないか、と思います。下記のようなイメージです。
- 取り扱うデータが、過去の日付しか入力されない
- 今日と比較して日付が新しいものをすべて前年として取り扱う
- 取り扱うデータが、未来の日付も入力されうる
- どれくらい未来の日付が入れられるのか、にもよるが、上記と同様に考え、比較する日付を今日から「今日+n日後」にする
1 Like
1117
8
@cheez_RPA 様
今回は、最終的には今日が何日であっても差がn日以内というのが決まっていたので、
条件式で該当の比較ができるように致しました。
ヒントをくださってありがとうございます。
system
(system)
Closed
10
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.