こんにちは。

2つのテキストボックスそれぞれに入っている日付を
同じ日付または次の日ならOKでそれ以外ならエラーを出すように比較したいのですが、
次の日をどのように表したらいいのか分かりません。


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

このQ&Aに関連する最新のQ&A

A 回答 (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

'*************************************************

みばえが悪いので適当に修正してください。
変数等は宣言してください。

以上、参考になれば幸いです。
    • good
    • 0
この回答へのお礼

こんにちは。早速ご返事ありがとうございました。

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

お礼日時:2001/03/29 15:57

DateDiff関数を使用してはどうでしょうか。


ご質問の日付を使って記述例を挙げてみます。

If DateDiff("d", "2001/03/31","2001/04/01") = 1 Then

これで翌日を判断することができるはずです。
ちなみに"d"は時間間隔モードで、日での比較を行うという意味です。
この方法ならテキストボックスからの値で比較できるのではないでしょうか。
(内部処理はDate型です)
    • good
    • 0
この回答へのお礼

こんにちは。早速ご返事ありがとうございました。

教えていただいた通り、DateDiff関数を使って翌日判定が
できました。

本当にありがとうございました。
もっともっと勉強して、早く一人前になれるようにがんばります。

お礼日時:2001/03/29 16:03

テキストボックスじゃなくて、DateTimePickerとかを使ったほうが、日付入力は簡単だと思います。



日付の比較は、Date型の変数で行うといいでしょう。
    • good
    • 0
この回答へのお礼

こんにちは。早速、ご返事ありがとうございます。

DateTimePickerっていうのがあったんですね~。
早速ヘルプで調べてみました。

テキストボックスのがうまく動作するようになったので、こちらでも
チャレンジしたいと思います。

本当にありがとうございました。

お礼日時:2001/03/29 16:09

このQ&Aに関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

Qリッチテキストボックスとテキストボックスの違い

VB6のリッチテキストボックスとテキストボックス
の違いは何なんでしょうか?

Aベストアンサー

RichTextだと扱えるファイルサイズが大きくなり
プロパティの指定が可能になります。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsrichtextboxclasstopic.asp

Qvbaで同じテキストボックスを繰り返し使いたい

エクセル2003 VBAでデータ入力フォームを作成中です。
データ2種類あり、2つのtextbox(t1 , t2)作りました。
t1のデータ入力後はEnterKeyでExitして
private SUB t1.exit(ByVal Cancel As MSForms.ReturnBoolean)
でエクセルのセル内への所定の場所に書き込みを実行しています。
ところが次にfocus(tabというのか)が移動する t2では 繰り返しデータを入力したいのです。ですからt1と同じようにしたのではEnterでt1にfocusが逃げてしまいます。データは2桁の数字です。Enterで確定してさらに繰り返しt2内でデータを入れ、0を入力しEnterしたときに初めてt1に移らせたいのです。EnterKeyBehaviorをtrueにするのか また
private SUB t2.Exit(ByVal Cancel As MSForms.ReturnBoolean)
で記述していいのかわかりません。教えてください。

Aベストアンサー

No.1です。
t2に戻って新たに値を入力するのだから、Cancel = True の前後)どちらでもいいです)に
t2.Text = "" と入れてt2の内容をクリアしておくといいかもしれません。

Qフォームのテキストボックスが空白なら移動させない

ExcelのVBAで悩んでいます

http://www.moug.net/tech/exvba/0090057.html

こちらのサイト様に書いてあるものを、そのまま使ってまったく問題無く希望通りの事をしてくれるのですが、右上の×を押してユーザーフォームを閉じようとしても条件が当てはまる為かメッセージボックスが表示されてしまいます。

このメッセージボックスを表示させない方法はありませんでしょうか?

正直、上記サイト様の記述通りでなくても構いません。
フォームのプロパティを変更するだけでいいならそれだけでも構いません。

どうかお知恵をお貸し下さいませ

Aベストアンサー

下記の様なコードを入力しておいてフォームを閉じると、

UserForm_QueryClose Event
TextBox_Exit Event
UserForm_Terminte Event

の順にイベントが起こる事が分かります。したがって、UserFormQueryCloseEventの際にフラグを立てて、TextBox1_Exitの中で、上記フラグが立っていれば抜けるようにすればいかがでしょうか。
下記コードにはそれも盛り込んであります。
質問者様のコード全容は分かりませんので、外していたら済みません。

Dim closingFlag As Boolean

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "TextBoxExitEvent"
If closingFlag Then Exit Sub
If Len(TextBox1.Value) = 0 Then
MsgBox "データを入力してください"
Cancel = True
End If
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Debug.Print "UserFormQueryCloseEvent"
closingFlag = True
End Sub

Private Sub UserForm_Terminate()
Debug.Print "UserFormTerminteEvent"
End Sub

下記の様なコードを入力しておいてフォームを閉じると、

UserForm_QueryClose Event
TextBox_Exit Event
UserForm_Terminte Event

の順にイベントが起こる事が分かります。したがって、UserFormQueryCloseEventの際にフラグを立てて、TextBox1_Exitの中で、上記フラグが立っていれば抜けるようにすればいかがでしょうか。
下記コードにはそれも盛り込んであります。
質問者様のコード全容は分かりませんので、外していたら済みません。

Dim closingFlag As Boolean

Private Sub TextBox1_Exit(ByVal Cancel As...続きを読む

Qテキスト氏名、日付とExcel表の連動

ユーザーフォームのテキスト氏名、日付1、日付2を入力したらExcel表のマッチした氏名行の日付を○印で入力するようなVBAのコードがありますでしょうか。どなたかご教授のほどよろしくお願いします。

Aベストアンサー

途中まででも出来ているのでしょうか、最初から作ってくれ?
しばらくお付き合いしますが、まず
>日付1、日付2を入力したら
ではなく、入力後、ボタンを押したらにしましょう、ミスが少なくなります。
ここで、3行目が数値なのか、日付なのかが問題です。
この部分は、同じタイプを入力させるべきですね。
更に、テキストフォームでなく、リストボックスを使いましょう。
入力ミスがなくなりますし、コードを書く上でエラー処理が必要でなくなります。
テキスト氏名は A列の中から選択
日付は     3行目から選択するようにすれば
それぞれに、リストインデックスが数値で得られますので、何行目の何列目というのは
検索をかける必要なく得られます。

それと、添付の画像が印刷か何かの為に必要な様式ですよね、私であれば、別途
 A  B   C
氏名 日付1 日付2
・・・・
とデータを確保するシートを準備して、フォーム上のボタンを押すとデータが記録されていく
表示されているシートには、関数で所定の位置に○が表示される様にしますが
如何でしょうか?

Q1番最初、ファイルを開いた時、メッセージボックスが出てきて、アンケートを答えてokボタンを押したら次

1番最初、ファイルを開いた時、メッセージボックスが出てきて、アンケートを答えてokボタンを押したら次回からは表示されない方法を教えてください。
実際は一年に一回更新の時だけ使います。
よろしくお願いします。

Aベストアンサー

自己解決してしまったらもう遅いのかもしれませんが、私はこのように考えました。
たぶん、ふつうは思いつかない方法だと思います。

Sub Auto_Open()
 Dim myDate As Variant
 Dim CDP As DocumentProperties
 Set CDP = ThisWorkbook.CustomDocumentProperties
 If CDP.Count = 0 Then
  If MsgBox("アンケートに答えてください。" & vbCrLf & _
   "Cancelを押すとブックは閉じます", vbExclamation + vbOKCancel) = vbCancel Then
   ThisWorkbook.Close False
  End If
 Else
  myDate = CDP(1).Value
  If Date > DateSerial(Year(myDate), Month(myDate), Day(myDate)) Then
   If MsgBox("1年を経過したので、再度アンケートに答えてください。" & vbCrLf & _
   "Cancelを押すとブックは閉じます", vbExclamation + vbOKCancel) = vbCancel Then
    ThisWorkbook.Close False
   End If
  End If
 End If
 '実際のアンケート調査
End Sub

Sub EnterProperty()
 myDate = Format(Date, "mm/dd/yy") '注意:日付は米語タイプ
 With ThisWorkbook.CustomDocumentProperties
  .Add Name:="RecodedDate", _
     LinkToContent:=False, _
     Type:=msoPropertyTypeDate, _
     Value:=myDate
 End With
End Sub

自己解決してしまったらもう遅いのかもしれませんが、私はこのように考えました。
たぶん、ふつうは思いつかない方法だと思います。

Sub Auto_Open()
 Dim myDate As Variant
 Dim CDP As DocumentProperties
 Set CDP = ThisWorkbook.CustomDocumentProperties
 If CDP.Count = 0 Then
  If MsgBox("アンケートに答えてください。" & vbCrLf & _
   "Cancelを押すとブックは閉じます", vbExclamation + vbOKCancel) = vbCancel Then
   ThisWorkbook.Close False
  End If
 Else
  myDate = CDP...続きを読む


人気Q&Aランキング

おすすめ情報