• ベストアンサー

日付を比較したいのですが

こんにちは。 2つのテキストボックスそれぞれに入っている日付を 同じ日付または次の日ならOKでそれ以外ならエラーを出すように比較したいのですが、 次の日をどのように表したらいいのか分かりません。 始めは、テキストボックスに入っている日付を文字列で"20010329"のように表して、 これと同じか "+1"ならOKとしていたのですが、 よく考えたら3月31日と4月1日なら"20010331"と"20010401"となり うまくいきません。 何か良い方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tom777
  • ベストアンサー率77% (14/18)
回答No.3

日付が正しく6桁で入力されているという前提で、以下のよ うにしてはどうでしょうか? '************************************************* sDate = "20010331" sDate2 = "20010401" sDate = Left$(sDate ,4) & "/" & Mid$(sDate, 5, 2) & "/" & Mid$(sDate, 7, 2) sDate2 = Left$(sDate2 ,4) & "/" & Mid$(sDate2, 5, 2) & "/" & Mid$(sDate2, 7, 2) If DateValue(sDate2) - DateValue(sDate) = 0 then Msgbox "同じ日付" Elseif DateValue(sDate2) - DateValue(sDate) = 1 then Msgbox "次の日" Else Msgbox "それ以外" End If '************************************************* みばえが悪いので適当に修正してください。 変数等は宣言してください。 以上、参考になれば幸いです。

oohchan
質問者

お礼

こんにちは。早速ご返事ありがとうございました。 tom777さんの教えて下さったのを参考にして、修正してうまく動作するように なりました。 本当にありがとうございました。もっともっと勉強して一人前になれるように がんばります。

その他の回答 (2)

  • wyvern0
  • ベストアンサー率32% (54/165)
回答No.2

DateDiff関数を使用してはどうでしょうか。 ご質問の日付を使って記述例を挙げてみます。 If DateDiff("d", "2001/03/31","2001/04/01") = 1 Then これで翌日を判断することができるはずです。 ちなみに"d"は時間間隔モードで、日での比較を行うという意味です。 この方法ならテキストボックスからの値で比較できるのではないでしょうか。 (内部処理はDate型です)

oohchan
質問者

お礼

こんにちは。早速ご返事ありがとうございました。 教えていただいた通り、DateDiff関数を使って翌日判定が できました。 本当にありがとうございました。 もっともっと勉強して、早く一人前になれるようにがんばります。

回答No.1

テキストボックスじゃなくて、DateTimePickerとかを使ったほうが、日付入力は簡単だと思います。 日付の比較は、Date型の変数で行うといいでしょう。

oohchan
質問者

お礼

こんにちは。早速、ご返事ありがとうございます。 DateTimePickerっていうのがあったんですね~。 早速ヘルプで調べてみました。 テキストボックスのがうまく動作するようになったので、こちらでも チャレンジしたいと思います。 本当にありがとうございました。

関連するQ&A

  • セレクトボックス日付同士の比較について

    以下をどなたか教えていただけないでしょうか?よろしくお願いします。 二つのセレクトボックスで年/月/日を作成する。 さらに追加ボタンを押したときに 1.日付を比較しどちらかが一方が存在しない場合アラートを表示する。 2.開始日と終了日が前後していたらアラートを表示する。 3.OKであればテキストボックスに日付を出力する 以上です。javascript初心者ですが、よろしくお願いいたします。

  • 日付を比較するときは

    あるルールを言語化しようと思っています。 その際に気になったのが、日付を比較するときの日本語。 例えば、1月1日と1月15日を比較したとき、 1月15日の方を「大きい日付」と言うのは正しい日本語ですか? どうぞよろしくお願いします!

  • Perlの日付の比較に関して

    現在perlを使ってCGIを作っているものです。 まだ、一ヶ月ちょっとの初心者と言うこともあり、 日付の操作の仕方で非常に苦労しています。 入力フォームには、リストボックスでそれぞれ、 ○○○○年 ○○月 ○○日 ○○時 ○○分があり、 フォームが表示されたときには、デフォルトで、本日の日付がセットされるようになっています。 送信ボタンを押す事で入力チェックがかかるのですが、 そのときに、上記の日付のリストボックスの値が、 本日よりも過去になっていたばあいは、エラーを返すと言う処理を作りたいのですが、どうしてもうまくいきません。 本日日付は、localtime関数で取れるのですが、 リストボックスにセットされている値を日付に変換する方法、 また、比較の仕方がさっぱりわかりません。 誰かわかる方がいましたら、ご教授ください。 具体的なソースも書いていただけると大変ありがたいです。 以上よろしくお願いします

    • ベストアンサー
    • Perl
  • Access 日付の切捨て

    "20060321"などの日付をあらわす文字列を、 "20060301"など、日を全てその月の1日に置換したいのですが、どうすればいいでしょうか? 勘で以下のようにしてみたのですが、エラーになってしまいました。 year(CDate([列名]))+month(CDate([列名]))+"01"

  • oooBasic 日付の範囲比較ができない

    OpenOffice.org Basic でコーディングしているのですが、日付の範囲の比較ができません。 ダイアログで日付のエンドとスタートを指定していて、読み込んだCSVファイルのあるセルがその日付の範囲内かを調べたいです。 ----- oDateStart = oDialog.getControl("DateStart").Text oDateEnd = oDialog.getControl("DateEnd").Text ~ oFileSales(1).Value = "44,34,64,1" 'oFileSales(1).Value="44,34,64,1,1/5/1/2/1/1/1/2/1/2/1/1/1/1/1/1/1/1/1/1/1/1/5/5/1/1/1/2" ---(a) ~ oDate = oSheetSales.getCellByPosition(ColSalesDate, i-1).String 'oDate = oSheetSales.getCellByPosition(ColSalesDate, i-1).Value ---(b) ~ If oDateStart <= CDate(oDate) and CDate(oDate) <= oDateEnd Then ---(c)ここがエラーになります。 処理 End if ----- oDateStart と oDateEnd は、ダイアログで指定した日付のテキスト(形式:YYYY/MM/DD(String))で、oDate は、読み込んだcsvファイルの日付(形式:MM月DD日(String))です。 『OpenOffleへの道』には CDate と DateValue は、"年""月""日"が入ったものは×とあります。 oDateのセルは、OpenOfficeで普通に開くと、"2012/12/12"のように表示されるのですが、マクロの中で開くと、なぜか"12月12日"となってしまいます。 (a)のように、読み込む列の書式を指定しても同じでした。 逆に、(b) のように oDateをシリアル値で取得して、シリアル値で比較できればと色々トライしましたが、oDateStart と oDateEnd のシリアル値への変換がわからず断念。 何かよい方法はないか、お知恵をお貸し頂けないでしょうか。 よろしくおねがいします。

  • エクセルで日付の文字列のシリアル値化

    E5セルに 2020年7月1日~2021年6月1日 という文字列があります。 AFセルに =IF(E5="","",LEFT(E5,FIND("日",E5))*1) AG5セルに =IF(E5="","",MID(E5,FIND("~",E5)+1,11)*1) として日付をシリアル値で取り出しています。 このエクセルを他の人にわたしたのですが、その方がE5に 2020年8月1日~2021年9月1日 という文字列をコピペしたところ AF5もAG5もVALUEエラーになってしまいました。 最初、入力した文字列の形式が誤っているのではと思って、メールでファイルをおくってもらったのですが、入力形式に問題はなく、VALUEエラーが出ていました。 わたしの端末で、そのセルにカーソルをあて、エンターキーを押すと日付に変わりました。 どのような原因でこうなるのでしょうか? VALUEエラーが出ないようにするのはどうすればいいのでしょうか?

  • 日付の比較

    こんばんは^^ 1) 標題の通り、日付の比較を行いたいのです。 Stringで例えば、「20021207」と「20020601」とか 西暦の年月日をもっているとします。 この2つを比較したいのです。 調べた所では、Dateクラス、Calenderクラスに after()やbefore()のメソッドがあって、それを 使えばいいと言う所までわかりました。 それで、DateクラスのコンストラクタにStringの文字を渡せる のですが、それは推奨されてないみたいで・・・・・。 DateFormatは使い方がいまいちわからなくて。。 どのようにして、Stringの文字列(年月日)をDateやCalender型 に変換して、比較を行えば良いでしょうか?? (簡単なサンプルを見せていただけると助かります) #intに変換して大小を比較する事も出来そうですが、それは #あまりやりたくないので、質問させてもらいました。 #よろしくお願いします。 2) あと、intに変換して比較することと比べて、DateやCalenderクラスの after()やbefore()を使うことによるメリットって何でしょうか?? (あまりメリットはない??) こちらは、興味で追加質問させていただきます。 ご存知の方、ご教示いただけると嬉しく思います。 非常にあつかましいとは思いますが、よろしくお願いします。 #さらに違うやり方などもあれば教えてください。

    • ベストアンサー
    • Java
  • エクセル 文字列になっている日付を日付データにしたい

    エクセル2002を使用しています。 他のシステムからCSV形式で出力されたデータの日付(生年月日)が、ほとんどは文字列(テキスト型)で、一部日付データになっています。 表示は、昭和50年1月12日という具合になっています。 これを、文字列も全て日付データ(そのセルを選択した場合、セルでは元号表示でも、数式バーでは1985/1/12というように西暦で表示)になるようにはできるでしょうか。 隣に作業列を設けても良いと思っています。 データは、約300件(300人)分あります。 たまに日付データとして登録されている者の理由は不明ですが、元のシステムの登録時に西暦で生年月日登録したのかもしれません。 よろしくお願いします。

  • 日付で判定する処理

    あまりよくわかっていないので恐縮ですが,掲示板のような処理で入力は日付と文章のみです. 入力の文字列の日付は,今日だと「2005/02/14」と入れ,文章は「こんにちは」としたとするとこの2つがテキストファイルに「,カンマ区切りで」書き込まれます.それをhtmlで表示させているようです. やりたい処理は1週間前の日付だったら文章の文字列を赤色で表示するということをしたいのです. 比較結果で赤文字列にする処理はわかったのですが判定の部分で悩んでおります. 判定する際,思いついたのが入力してある文字列がたとえば「2005/02/14」の形式なのでこの値と今日の日付とを比較して7日前だったら文章を赤文字にしたいのですが,普通はどのような比較をするのでしょうか? 私が考えたのは,ファイルに書き込まれている「2005/02/14」を読み込み「/」をなくして「20050214」にし数字形式にすることで,今日の日付も,「20050214」の形式として7日を引けば負の時は何もせず正の時は文章を赤文字で表示させればと考えたのですが,ファイルから読み込んだ「2005/02/14」から「/」を無くす方法や今日の日付を取得した結果は文字列の形式みたいなので計算にはつかえないようです. 実はもっと簡単な方法があるのではないかと悩んでいたりしています.どなたかご教授お願いいたします.

    • ベストアンサー
    • Perl
  • 【至急】 日付でファイル名を作成

    EXCEL VBAを使って複数の日付を入れてファイル名を作成したいと思ってます。 例えば【11月29、30、12月1日.xls】という感じです。     A列    11月29日    11月30日    12月1日      ・      ・       A列に1個~5個の日付が入ります。 1個の場合も、2個の場合もあります。 同じ月は月を省略し、次が変わるときはその月も投入したいです。 日付をくっつける事が出来ません。 明日、仕事で使いたいので、出来れば早急に教えてください。 宜しくお願いします。 EXCEL2003を使用してます。 ほぼ初心者なので詳しく教えて頂けると助かります。 宜しくお願いします。

専門家に質問してみよう