Excel 月日しか情報がない場合の年の考え方について

たくさん質問してしまいすみません。
内容が異なるため別スレで投稿させていただいております。

例えば、
A1→11/30
A2→12/31
A3→1/31
A4→2/29
このようにデータが入っているとして、人間が見たら現在は1月ですので11/30や12/31というのは過去であることがわかりますが、ロボットでは未来(2020年)の11/30や12/31になってしまいます。

また、現在の月がA1に来るときもあれば、最終行に来るときもあります。
このような時、現在の該当月より上のデータが過去であると認識させるための方法はありませんか?

@1117 さん

大変難しい問題ですね。人間の場合、融通を聞かせた推測が成り立ちますが、コンピューター(含むRPA)は、基本的に「馬鹿正直に与えられたデータを処理する」動作になります。

そこで人間が何かしらのロジック(考え方)をコンピューターに教えることで対応するしかないのですが、 今回の場合だと、次のような感じでしょうか。

  • 全部の行を順番に見て、「月」が現在の月と一致する行を探す(NOTE:上から見るのと下から見るの、どちらも考えられますが、処理の結果が異なる可能性があるので注意が必要です)
  • そこから遡って上にある行は過去と判断し、12月を跨いだところで「年」の部分に去年の値を設定
  • 逆に今月より先は今年と判断しつつ、12月を超えたら翌年の日付を振る

といった処理を、ワークフローを作成して行う必要が出てくるかな、と思います。

1 Like

多分、EXCEL内部では年が存在していて、表示形式で月/日になっているものと考えます。

一度表示形式を変えてみてから考えてみたら如何でしょう?

@HANACCHI
実は、元々のデータは1/1-1/10や1/11-1/20といった文字列のデータになっていて、Split関数で後ろの1/10や1/20だけを抽出し現在の日付と比較しています。

ご回答ありがとうございます。
元々文字列のデータが入っているため、一つ目の「現在の月と一致する行を探す」というのを行うために、日付列を1行ずつ上から比較し、Datediff関数を使用し、返される値がプラスになったら処理を行おうとしていました。

このとき、12/31などは去年の為マイナスにならなければいけないのですが、プラスの値になってしまうために比較ができずの質問でした。

言葉足らずですみません、、

@1117 さん

いったん、DateTime型に変換した上で、

 変数.AddMonth(1)
 変数.AddMonth(-1)

で月を加算・減算するとかどうでしょうか。
(これだと年の繰り上がり・繰り下がりは自動でやってくれます)

@tkgsn146 さんも書かれていますが、実際に入力が想定されるデータの特徴から、決め打ちでいくしかないのではないか、と思います。下記のようなイメージです。

  • 取り扱うデータが、過去の日付しか入力されない
    • 今日と比較して日付が新しいものをすべて前年として取り扱う
  • 取り扱うデータが、未来の日付も入力されうる
    • どれくらい未来の日付が入れられるのか、にもよるが、上記と同様に考え、比較する日付を今日から「今日+n日後」にする
1 Like

@cheez_RPA
今回は、最終的には今日が何日であっても差がn日以内というのが決まっていたので、
条件式で該当の比較ができるように致しました。
ヒントをくださってありがとうございます。

ありゃ…それはもう業務仕様から決め打ちですねー。

是非頑張って実装下さいね!

1 Like

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