プロが教えるわが家の防犯対策術!

フォームから日付を入力して
過去日なら、一年プラスしています。

例えば12月15日に1月1日と入力すると
2022年1月1日ではなく、2023年1月1日となるのですが

例外があって、年も一緒に入力した場合は、一年プラスしたくないのですが、どんな方法があるでしょうか?
例えば、今年5月入力で
年を付け加えて、2022年4月1日と入力すると
現状だと2023年4月1日になります。

これが、ちゃんと2022で反映させるには、何かいい方法はありますか?

【現状】具体的なコードはここでは書き出さない環境で申し訳ないのですが

1,フォームに日付入力して、ボタンを押して
input_date.value をisdateで日付かどうか確認
2, input_date.valueが日付なら、cdateで、日付型に変換
3,dateとinput_date.valueをifで、過去日かどうかを判定
4,過去日ならdateserialで一年プラスする


具体的なコードではなく、これを使えばいいみたいな
ヒントをいただけたら、助かります。

質問者からの補足コメント

  • excel 2016です。

    この問題は年を省いても、入力しても
    どちらも今年で入力されてしまうので、ifで分岐出来ません

      補足日時:2022/05/26 12:45

A 回答 (6件)

こんにちは



現状がどうなっているのかわかりませんけれど、フォームのテキストボックス等への入力であるものと想像しました。

自動変換で日付型に読み替えてしまった後で判断するのは難しいと思います。
入力値は、基本的には文字列なので、入力フォーマットが決まっているなら(=スラッシュ区切り等)それで分割して、値が3個あれば年も入力、2個なら年の入力無しと判定できるのでは?

自由入力を許すのなら(=○○年〇月〇日など)、数字を半角アラビア数字と仮定してよければ、数字の連続を抽出し、上記同様に3個あれば年も入力と判断。

全角数字や漢数字も許容しているのなら、まず、半角数字に置き換えてから、上記の判定を行うとか。
和歴の年号に関しても同様と思います。
    • good
    • 1
この回答へのお礼

ありがとうございます。
テキストフォームです。

文字の状態で判断ですね。

お礼日時:2022/05/26 18:05

日付が2022/5/3 又は 5/3のように、入力される前提です。



1,フォームに日付入力して、ボタンを押して
input_date.value をisdateで日付かどうか確認

2, input_date.valueが日付なら以下の処理をする。
①日付を/で分割する。
②分割結果が3つの要素なら以下の処理なし。
 分割結果が2つの要素なら以下の処理をする。
 1番目=月、2番目=日と解釈する。
 現在日付を取得し、現在(月日)>分割された月日なら、input.valueの頭に現在(年)+1を付加する。
 現在(月日)=<分割された月日なら、input.valueの頭に現在(年)を付加する。
③input_date.valueをcdateで、日付型に変換
以上で完了です。
    • good
    • 0

私ならそもそも年も入力してもらいます。



ユーザー視点から言えば、ブラックボックスな内部処理で年が変更されてしまうのは仕様として好ましくなく思います。

keydown, change イベントを使って独自の入力規則をコーディングするかな。
    • good
    • 0
この回答へのお礼

確かに勝手に年が変更されるのはあまり、よろしくないですよね。

ありがとうございます。

お礼日時:2022/05/26 18:00

入力する文字列は、日付が4月1日なら


4/1 もしくは、2022/4/1
のようにする前提です。

>2, input_date.valueが日付なら、cdateで、日付型に変換

これを行う前に、//が2つなら年が入力されて、/が1つなら年が入力されていない。と判断してはいかがでしょうか。

もし、前提が誤っているなら、具体的にどのような値を入力しているのかを
提示してください。それが判らないと、回答のしようがないです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
文字型入力なので、色んな値がはいってしまいますね。

//か、または、年、月の位置で判断してみようと思います。

お礼日時:2022/05/26 18:01

>No.1(fujinさん)


「fujillinさん」でした。失礼しました。
    • good
    • 0

No.1(fujinさん)がいってるのは、


>1,フォームに日付入力して、ボタンを押して
>input_date.value をisdateで日付かどうか確認
――のところを、
>1,フォームに日付入力して、ボタンを押して
+ input_date.value like "20*" で西暦始まりか判断(大雑把)
+ 真ならそのままcdate()に変換して終わり。さもなくば、
>input_date.value をisdateで日付かどうか確認
――みたいにしては、ということかと。

>ifで分岐出来ません
isdate使って、ifで分岐しているのでは。
    • good
    • 0
この回答へのお礼

解説ありがとうございます。

年が入力か、入力してないかの分岐のことです。

お礼日時:2022/05/26 18:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!