期間重複チェック。コード以外での回答は遠慮下さい
VB2005+SQLServer2005で開発を行っています。
期間を3つ入力してデータを抽出する
プログラムを作っているのですが
期間重複チェックがわかりません
期間(1)~期間(3)まであります(抽出条件)
1,2,3各期間重複する場合は再入力させるとしか
仕様書に書かれておらず
プログラミングできず困っています。
期間(1)
txtStartDate1.text
txtEndDate1.text
期間(2)
txtStartDate2.text
txtEndDate2.text
期間(3)
txtStartDate3.text
txtEndDate3.text
実を言うとvisual basicのカテゴリでも同じような
質問をしたのですがプログラムコードの回答が得られず
困っています。プログラマに向いていないというような
回答も見受けられましたがどうしても
プログラムコードでの回答がほしいです
皆さんお忙しい中申し訳ありませんが
プログラムコードでのご回答をお願いいたします。
コード以外でのご回答はご遠慮ください
私はこの仕事に向いていないのでしょうか
毎日つらいです。
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
・日付1の終了日と日付2の開始日が同一の場合は重複とするのか?
・エラーが発生した場合はどういう挙動をさせるのか?
(フォーカス遷移や、メッセージがそれぞれ異なるのか?)
・NGとしても他の検証を進め、最後にエラー内容を一挙に出力するのか?
など、仕様としては疑問に残る箇所が多々ありますが、無視してコードすると
このようになるでしょう。
ちょっと一部汚くなってしまいましたが。
私が書いたロジックは、全て調べればすぐに分かることです。
意味が理解できなければ調べましょう。
丸投げは良くありませんよ。
学習すること、考えることを放棄しているようにしか感じられません。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' 入力値検証
If Not Validate() Then
MessageBox.Show("NG")
Return
End If
MessageBox.Show("OK")
End Sub
''' <summary>
''' 入力値検証メソッド
''' </summary>
''' <returns>True:OK, False:NG</returns>
''' <remarks></remarks>
Private Shadows Function Validate() As Boolean
' ~ 予め、日付1, 2, 3が入力されている場合に、日付として妥当かなどのチェックがあったりなかったり ~
' 期間検証
Dim ResultControl As Control = Nothing
If Not IsValidDateRange(ResultControl) Then
ResultControl.Focus()
Return False
End If
Return True
End Function
''' <summary>
''' 期間検証メソッド
''' </summary>
''' <param name="Result">エラー発生コントロール</param>
''' <returns>True:OK, False:NG</returns>
''' <remarks></remarks>
Private Function IsValidDateRange(ByRef Result As Control) As Boolean
Dim sdt1 As Date
Dim edt1 As Date
Dim sdt2 As Date
Dim edt2 As Date
Dim sdt3 As Date
Dim edt3 As Date
Dim parseResult As Boolean
' 日付1、日付2の重複チェック
parseResult = True
parseResult = parseResult And Date.TryParse(txtStartDate1.Text, sdt1)
parseResult = parseResult And Date.TryParse(txtEndDate1.Text, edt1)
parseResult = parseResult And Date.TryParse(txtStartDate2.Text, sdt2)
parseResult = parseResult And Date.TryParse(txtEndDate2.Text, edt2)
If parseResult Then
If IsDuplicateDateRange(sdt1, edt1, sdt2, edt2) Then
Result = txtStartDate1
Return False
End If
End If
' 日付2、日付3の重複チェック
parseResult = True
parseResult = parseResult And Date.TryParse(txtStartDate2.Text, sdt2)
parseResult = parseResult And Date.TryParse(txtEndDate2.Text, edt2)
parseResult = parseResult And Date.TryParse(txtStartDate3.Text, sdt3)
parseResult = parseResult And Date.TryParse(txtEndDate3.Text, edt3)
If parseResult Then
If IsDuplicateDateRange(sdt2, edt2, sdt3, edt3) Then
Result = txtStartDate2
Return False
End If
End If
' 日付3、日付1の重複チェック
parseResult = True
parseResult = parseResult And Date.TryParse(txtStartDate3.Text, sdt3)
parseResult = parseResult And Date.TryParse(txtEndDate3.Text, edt3)
parseResult = parseResult And Date.TryParse(txtStartDate1.Text, sdt1)
parseResult = parseResult And Date.TryParse(txtEndDate1.Text, edt1)
If parseResult Then
If IsDuplicateDateRange(sdt3, edt3, sdt1, edt1) Then
Result = txtStartDate3
Return False
End If
End If
Return True
End Function
''' <summary>
''' 重複チェックメソッド
''' </summary>
''' <param name="SourceStartDate">基準開始日付</param>
''' <param name="SourceEndDate">基準終了日付</param>
''' <param name="TargetStartDate">対象開始日付</param>
''' <param name="TargetEndDate">対象終了日付</param>
''' <returns>True:重複あり, False:重複なし</returns>
''' <remarks></remarks>
Private Function IsDuplicateDateRange(ByRef SourceStartDate As Date, ByRef SourceEndDate As Date, _
ByRef TargetStartDate As Date, ByRef TargetEndDate As Date) As Boolean
' <--------->
' <---->
If SourceStartDate <= TargetStartDate And SourceEndDate >= TargetEndDate Then
Return True
End If
'<--------->
' <---------->
' と
' <--------->
' <-------------------->
If SourceEndDate >= TargetStartDate And SourceEndDate <= TargetEndDate Then
Return True
End If
' <--------->
' <------>
If SourceStartDate >= TargetStartDate And SourceStartDate <= TargetEndDate Then
Return True
End If
Return False
End Function
End Class
No.6
- 回答日時:
>単純に上からコードを記述したらメッセージボックスが何回も出力されてしまいました。
一度でも「重複している」と判断したら、もうそれ以上判定を行ってはいけません。
当方の示したコードは
If CDate(txtStartDate1.text) = CDate(txtStartDate2.text) Then
GoTo 再入力
End If
のように、重複と判明した段階でGoTo文で飛んで、それ以上判定しないようになっています。
質問者さんの
If txtStartDate1.Text = txtStartDate2.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text = txtStartDate3.Text Then
MsgBox("期間が重複しています。")
End If
(以下略)
と言うコードでは、重複と判明したらメッセージボックスを表示するまでは良いのですが、その後もやらなくても良い判定を続けてしまいます。
日本語で表記した場合、当方のプログラムは、本来であれば
条件1が成り立ったら、再入力へ飛ぶ。
さもなくば、条件2が成り立ったら、再入力へ飛ぶ。
さもなくば、条件3が成り立ったら、再入力へ飛ぶ。
さもなくば、条件4が成り立ったら、再入力へ飛ぶ。
さもなくば、条件5が成り立ったら、再入力へ飛ぶ。
さもなくば、サーチを実行する。'←どの条件も成り立たなかった場合
と書くべきなのですが、どれか1つでも条件が成り立って「再入力へ飛ぶ」と、それ以上の判定は行わないので
条件1が成り立ったら、再入力へ飛ぶ。
次に、条件2が成り立ったら、再入力へ飛ぶ。
次に、条件3が成り立ったら、再入力へ飛ぶ。
次に、条件4が成り立ったら、再入力へ飛ぶ。
次に、条件5が成り立ったら、再入力へ飛ぶ。
次に、サーチを実行する。'←どの条件も成り立たなかった場合
と書いているのです。
一方、質問者さんのプログラムの場合は
条件1が成り立ったら、メッセージボックス表示。
次に、条件2が成り立ったら、メッセージボックス表示。
次に、条件3が成り立ったら、メッセージボックス表示。
次に、条件4が成り立ったら、メッセージボックス表示。
次に、条件5が成り立ったら、メッセージボックス表示。
となっている為、条件が成り立ってメッセージボックスを表示した後も、引き続いて「余計な判定」を続けてしまいます。
それを防ぐには、
条件1が成り立ったら、メッセージボックス表示。
さもなくば、条件2が成り立ったら、メッセージボックス表示。
さもなくば、条件3が成り立ったら、メッセージボックス表示。
さもなくば、条件4が成り立ったら、メッセージボックス表示。
さもなくば、条件5が成り立ったら、メッセージボックス表示。
さもなくば、サーチを実行する。'←どの条件も成り立たなかった場合
と「本来の書き方」をしないといけません。
実際のコードで書くと
If txtStartDate1.Text = txtStartDate2.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text = txtStartDate3.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate2.Text = txtStartDate3.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text < txtStartDate2.Text And txtEndDate1.Text >= txtStartDate2.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text < txtStartDate3.Text And txtEndDate1.Text >= txtStartDate3.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate2.Text < txtStartDate3.Text And txtEndDate2.Text >= txtStartDate3.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text > txtStartDate2.Text And txtStartDate1.Text <= txtEndDate2.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text > txtStartDate3.Text And txtStartDate1.Text <= txtEndDate3.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate2.Text > txtStartDate3.Text And txtStartDate2.Text <= txtEndDate3.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text = txtStartDate2.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text = txtStartDate3.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate2.Text = txtStartDate3.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text < txtStartDate2.Text And txtEndDate1.Text >= txtStartDate2.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text < txtStartDate3.Text And txtEndDate1.Text >= txtStartDate3.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate2.Text < txtStartDate3.Text And txtEndDate2.Text >= txtStartDate3.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text > txtStartDate2.Text And txtStartDate1.Text <= txtEndDate2.Text Then
clsDjsUtility.ShowWarningMessage("期間が重複しています。")
ElseIf txtStartDate1.Text > txtStartDate3.Text And txtStartDate1.Text <= txtEndDate3.Text Then
clsDjsUtility.ShowWarningMessage("期間が重複しています。")
ElseIf txtStartDate2.Text > txtStartDate3.Text And txtStartDate2.Text <= txtEndDate3.Text Then
clsDjsUtility.ShowWarningMessage("期間が重複しています。")
Else
サーチ処理をする
End If
となります。
最後が
Else
サーチ処理をする
End If
になっている事に注意しましょう。
もし
If txtStartDate1.Text = txtStartDate2.Text Then
MsgBox("期間が重複しています。")
ElseIf txtStartDate1.Text = txtStartDate3.Text Then
(略)
ElseIf txtStartDate2.Text > txtStartDate3.Text And txtStartDate2.Text <= txtEndDate3.Text Then
clsDjsUtility.ShowWarningMessage("期間が重複しています。")
End If
サーチ処理をする
だと、「重複している」とのメッセージボックスを表示した後に、サーチ処理をしてしまいます。
質問者さんは「メッセージボックスを表示したあと、サーチ処理をしないで終わらせる方法」を考えていましたか?
サーチ処理をして良いのは「メッセージボックスを1つも表示しなかった場合だけ」だと言うのを判っていましたか?
>日本語を理解する能力が不足しているために度々先輩に怒られます。
だとすると、どの職業に就いても同じように苦労すると思われます。「プログラマーに向いてない」と言うより「考えるのに向いてない」のだと思います。
芸術家とか、音楽家とか、クリエィティブな仕事だと、上手く行くような気がします。
なお、脳梁部部分欠損症などで、軽度の高次脳機能障害があると、日本語を理解する能力が不足したりするので、一度、専門医に精密検査してもらう事をお薦めします。
この回答への補足
現在、貴方様がつくられたプログラムですと
期間(1)~期間(3)全て入力されていないと(""があると重複となる)
必ず重複となってしまいます。
そこの部分をお礼に欄に書いた仕様追加したコードをご回答願えませんでしょうか
わがままをいって大変申し訳ありません
何度もご回答いただきありがとうございました。
もう一つ教えて欲しいことがあるのですが
貴方様が作成したプログラムに
期間(1)
txtstartdate1.textとtxtenddate1.textは
必須入力で
期間(2)
txtstartdate2.textとtxtenddate2.textは任意入力
期間(3)
txtstartdate3.textとtxtenddate3.textは任意入力
開始が入力されたら必ず終了も入力するという
仕様が抜けていました。
大変いいずらいのですがお力をおかし願いませんでしょうか
よろしくお願いいたします。
No.5
- 回答日時:
No.3
>1.期間の組み合わせとしては以下があります。
改めて考えてみた所、ケース(6)がありました。
それは、宿題としますので自分で考えてみて下さい。
#テストケースを作る時に必要です。
No.3
- 回答日時:
1.期間の組み合わせとしては以下があります。
(1)期間2End < 期間1Start -> 重複無し
期間1:______<=====>
期間2:<===>
(2)期間2Start < 期間1End -> 重複無し
期間1:____<=====>
期間2:____________<===>
(3)期間2Endが期間1Startと期間1Endの範囲内 -> 重複有り
期間1:_____<=====>
期間2:___<===>
(4)期間2Startが期間1Startと期間1Endの範囲内 -> 重複有り
期間1:_____<=====>
期間2:_________<===>
(5)期間2Endが期間1Startと期間1Endの範囲内 -> 重複有り
(期間2Startが期間1Startと期間1Endの範囲内 -> 重複有り)
期間1:_____<=====>
期間2:______<===>
※(5)のケースは(3)(4)でチェック可能なので省略可能
2.チェックが必要な期間は3つあるので
(1)期間1と期間2
(2)期間1と期間3
(3)期間2と期間3
で比較処理を行って、1つでも重複があった場合は重複エラーとする。
但し、期間が未入力の場合はチェックは行わない。
#期間Start<=期間Endのチェックは必須
#全てが未入力だった場合をエラーとする場合は別途にチェックが必要
3.
>単純に上からコードを記述したらメッセージボックスが何回も出力されてしまいました。
エラーNo = 1
Do
If 条件1 = エラー Then
Exit Do
End if
.
.
If 条件n = エラー Then
Exit Do
End if
エラーNo = 0
Loop While 1
If エラーNo <> 0 Then
MsgBox("期間が重複しています。")
End If
◆後は、上記を具体的なコードに落とすだけです。
>私はこの仕事に向いていないのでしょうか
中小企業診断士の資格をとろうと思います。
http://oshiete.goo.ne.jp/qa/7890398.html
>2年間位(仕事をしながら)勉強してとれればいいなと思っています。
↑の様な事を質問している暇があるぐらいなら、目の前の仕事を
ちゃんとこなしていきましょう!!
No.2
- 回答日時:
追記。
>1,2,3各期間重複する場合は再入力させるとしか
>仕様書に書かれておらず
「プログラミングする」とは「処理の細分化を行う」って事です。
「1,2,3各期間重複する場合」を細分化すると「1と2が重複する場合、または、1と3が重複する場合、または、2と3が重複する場合」になります。
結局は「AとBが重複する場合」を「1と2、1と3、2と3で、合計3回やる」って事です。
「AとBが重複する場合」を細分化すると「Aが先に始まる場合」と「AとBが同時に始まる場合」と「Bが先に始まる場合」になります。
このうち「AとBが同時に始まる」ってのは明らかに重複してますから、条件判断してエラーにします。
次に「Aが先に始まる場合」を細分化して「Aが先に始まって、Aが終わる前にBが始まる」「Aが先に始まって、Aが終わると同時にBが始まる」「Aが先に始まって、Aが終わってからBが始まる」に細分化します。
このうち、「Aが先に始まって、Aが終わる前にBが始まる」「Aが先に始まって、Aが終わると同時にBが始まる」ってのは明らかに重複してますから、条件判断してエラーにします。
「Bが先に始まる場合」も同様に細分化すれば、同様に、条件が導けるようになります。
結局「言語仕様に合わせた細かさまで細分化すれば、プログラムが書ける筈」なのです。
これは、visual basicもC言語もアセンブラも同じです。
処理を「ここのメモリの内容をCPUのレジスタにロードする」って感じの所まで究極に細分化すれば、アセンブラで書く事だって可能です。
ご回答度々いただきありがとうございます。
日本語を理解する能力が不足しているために度々先輩に怒られます。
今回も詳しい説明をいただいているにもかかわらず理解力不足のため
?が残ります。この仕事に向いていないのかもしれません。
よくわかっています。馬鹿だなって思い自信が全く持てません。
まことにいいにくいのですがif文を入れ子にした
完成したプログラムコードでの回答をいただけませんでしょうか。
わがまま言って申し訳ありません。
No.1
- 回答日時:
まず、期間1~3の順番について、すべてのケースを考えます。
期間1の開始<期間2の開始<期間3の開始⇒次のステップへ
期間1の開始<期間2の開始=期間3の開始⇒重複エラー
期間1の開始<期間2の開始>期間3の開始⇒次のステップへ
期間1の開始=期間2の開始<期間3の開始⇒重複エラー
期間1の開始=期間2の開始=期間3の開始⇒重複エラー
期間1の開始=期間2の開始>期間3の開始⇒重複エラー
期間1の開始>期間2の開始<期間3の開始⇒次のステップへ
期間1の開始>期間2の開始=期間3の開始⇒重複エラー
期間1の開始>期間2の開始>期間3の開始⇒次のステップへ
期間1の開始<期間3の開始<期間2の開始⇒次のステップへ
期間1の開始<期間3の開始=期間2の開始⇒重複エラー
期間1の開始<期間3の開始>期間2の開始⇒次のステップへ
期間1の開始=期間3の開始<期間2の開始⇒重複エラー
期間1の開始=期間3の開始=期間2の開始⇒重複エラー
期間1の開始=期間3の開始>期間2の開始⇒重複エラー
期間1の開始>期間3の開始<期間2の開始⇒次のステップへ
期間1の開始>期間3の開始=期間2の開始⇒重複エラー
期間1の開始>期間3の開始>期間2の開始⇒次のステップへ
結局、期間の開始で一致が起きたら、重複している、と言う事です。
コードで書くと
If CDate(txtStartDate1.text) = CDate(txtStartDate2.text) Then
GoTo 再入力
End If
If CDate(txtStartDate1.text) = CDate(txtStartDate3.text) Then
GoTo 再入力
End If
If CDate(txtStartDate2.text) = CDate(txtStartDate3.text) Then
GoTo 再入力
End If
となります。
次に
期間1の開始<期間2の開始
期間1の開始<期間3の開始
期間2の開始<期間3の開始
期間1の開始>期間2の開始
期間1の開始>期間3の開始
期間2の開始>期間3の開始
の6つのパターンについて、1つづつ個別に考えます。
期間1の開始<期間2の開始
の場合、エラーにならないのは
期間1の終了<期間2の開始
の場合だけです。
期間1の終了=期間2の開始
や
期間1の終了>期間2の開始
では、1の終了と2の開始が同じ日に重複しているか、1が終了する前に2が開始しています。
コードで書くと
If CDate(txtStartDate1.text) < CDate(txtStartDate2.text) And CDate(txtEndDate1.text) >= CDate(txtStartDate2.text) Then
GoTo 再入力
End If
期間1の開始<期間3の開始
の場合、エラーにならないのは
期間1の終了<期間3の開始
の場合だけです。
期間1の終了=期間3の開始
や
期間1の終了>期間3の開始
では、1の終了と3の開始が同じ日に重複しているか、1が終了する前に3が開始しています。
コードで書くと
If CDate(txtStartDate1.text) < CDate(txtStartDate3.text) And CDate(txtEndDate1.text) >= CDate(txtStartDate3.text) Then
GoTo 再入力
End If
期間2の開始<期間3の開始
の場合、エラーにならないのは
期間2の終了<期間3の開始
の場合だけです。
期間2の終了=期間3の開始
や
期間2の終了>期間3の開始
では、2の終了と3の開始が同じ日に重複しているか、2が終了する前に3が開始しています。
コードで書くと
If CDate(txtStartDate2.text) < CDate(txtStartDate3.text) And CDate(txtEndDate2.text) >= CDate(txtStartDate3.text) Then
GoTo 再入力
End If
残りの3つも同様にコードで書くと
If CDate(txtStartDate1.text) > CDate(txtStartDate2.text) And CDate(txtStartDate1.text) <= CDate(txtEndDate2.text) Then
GoTo 再入力
End If
If CDate(txtStartDate1.text) > CDate(txtStartDate3.text) And CDate(txtStartDate1.text) <= CDate(txtEndDate3.text) Then
GoTo 再入力
End If
If CDate(txtStartDate2.text) > CDate(txtStartDate3.text) And CDate(txtStartDate2.text) <= CDate(txtEndDate3.text) Then
GoTo 再入力
End If
となります。
---
こういうのを考える場合、AとBの2つの期間で、有り得る組み合わせを、すべてグラフ化してみましょう。
1.AとBが同時に始まる
1.1.AとBが同時に終わる
AAAAAAA
BBBBBBB
1.2.Aが先に終わる
AAAA
BBBBBBB
1.3.Bが先に終わる
AAAAAAA
BBBB
1.1、1.2、1.3のどれもエラーです。
If CDate(txtStartDate1.text) = CDate(txtStartDate2.text) Then
GoTo 再入力
End If
AとBで成り立つ事は、AとC、BとCでも成り立ちます。
If CDate(txtStartDate1.text) = CDate(txtStartDate3.text) Then
GoTo 再入力
End If
If CDate(txtStartDate2.text) = CDate(txtStartDate3.text) Then
GoTo 再入力
End If
2.Aが先に始まる
2.1.Aが終わる前にBが始まる
2.1.1.AとBが同時に終わる
AAAAAAAA
BBBBBB
2.1.2.Aが先に終わる
AAAAA
BBBBBB
2.1.3.Bが先に終わる
AAAAAAAAAAA
BBBBBB
2.2.Aが終わる日にBが始まる
AAAAA
BBBBBB
2.3.Aが終わってからBが始まる
AAAAA
BBBBBB
結局、Aが終わる前にBが始まる(同時含む)とエラーです。
If CDate(txtStartDate1.text) < CDate(txtStartDate2.text) And CDate(txtEndDate1.text) >= CDate(txtStartDate2.text) Then
GoTo 再入力
End If
AとBで成り立つ事は、AとC、BとCでも成り立ちます。
If CDate(txtStartDate1.text) < CDate(txtStartDate3.text) And CDate(txtEndDate1.text) >= CDate(txtStartDate3.text) Then
GoTo 再入力
End If
If CDate(txtStartDate2.text) < CDate(txtStartDate3.text) And CDate(txtEndDate2.text) >= CDate(txtStartDate3.text) Then
GoTo 再入力
End If
3.Bが先に始まる
3.1.Bが終わる前にAが始まる
3.1.1.AとBが同時に終わる
AAAAAA
BBBBBBBB
3.1.2.Bが先に終わる
AAAAA
BBBBBB
3.1.3.Aが先に終わる
AAAAAAA
BBBBBBBBBBB
3.2.Bが終わる日にAが始まる
AAAAA
BBBBBB
3.3.Bが終わってからAが始まる
BBBBBB
AAAAA
結局、Bが終わる前にAが始まる(同時含む)とエラーです。
If CDate(txtStartDate1.text) > CDate(txtStartDate2.text) And CDate(txtStartDate1.text) <= CDate(txtEndDate2.text) Then
GoTo 再入力
End If
AとBで成り立つ事は、AとC、BとCでも成り立ちます。
If CDate(txtStartDate1.text) > CDate(txtStartDate3.text) And CDate(txtStartDate1.text) <= CDate(txtEndDate3.text) Then
GoTo 再入力
End If
If CDate(txtStartDate2.text) > CDate(txtStartDate3.text) And CDate(txtStartDate2.text) <= CDate(txtEndDate3.text) Then
GoTo 再入力
End If
以上。
お忙しい中長文でのご回答ありがとうございました。
貴方様がおっしゃる様にコードを並べたのでが並べるだけではだめなようです。
単純に上からコードを記述したらメッセージボックスが何回も出力されてしまいました。
if文を入れ子にしないとだめなようです。
if文を入れ子にしたコードをご回答願えませんでしょうか
後<= の様に記述したパターンもあると助かります。本当にわがままを言って申し訳ありません
Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click
If txtStartDate1.Text = txtStartDate2.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text = txtStartDate3.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate2.Text = txtStartDate3.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text < txtStartDate2.Text And txtEndDate1.Text >= txtStartDate2.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text < txtStartDate3.Text And txtEndDate1.Text >= txtStartDate3.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate2.Text < txtStartDate3.Text And txtEndDate2.Text >= txtStartDate3.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text > txtStartDate2.Text And txtStartDate1.Text <= txtEndDate2.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text > txtStartDate3.Text And txtStartDate1.Text <= txtEndDate3.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate2.Text > txtStartDate3.Text And txtStartDate2.Text <= txtEndDate3.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text = txtStartDate2.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text = txtStartDate3.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate2.Text = txtStartDate3.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text < txtStartDate2.Text And txtEndDate1.Text >= txtStartDate2.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text < txtStartDate3.Text And txtEndDate1.Text >= txtStartDate3.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate2.Text < txtStartDate3.Text And txtEndDate2.Text >= txtStartDate3.Text Then
MsgBox("期間が重複しています。")
End If
If txtStartDate1.Text > txtStartDate2.Text And txtStartDate1.Text <= txtEndDate2.Text Then
clsDjsUtility.ShowWarningMessage("期間が重複しています。")
End If
If txtStartDate1.Text > txtStartDate3.Text And txtStartDate1.Text <= txtEndDate3.Text Then
clsDjsUtility.ShowWarningMessage("期間が重複しています。")
End If
If txtStartDate2.Text > txtStartDate3.Text And txtStartDate2.Text <= txtEndDate3.Text Then
clsDjsUtility.ShowWarningMessage("期間が重複しています。")
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- 借地・借家 賃貸の事故物件。告知義務は「直後の入居者のみ」か「3年間は告知義務あり」どっち? 2 2023/05/18 06:01
- 物理学 プラズマ運転と核融合運転は、違うものなのでしょうか? プラズマ運転と核融合運転は、全く違うものなので 2 2023/04/30 16:34
- 工学 プラズマ運転と核融合運転は、違うものなのでしょうか? 1 2023/04/30 10:14
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
失業手当受給の申請期間
-
待機期間中に内定を受けた場合...
-
70歳以上の雇用保険について
-
1週間で退職したら、離職票が出...
-
離職票1・2を原本でなくコピー...
-
残業をした場合の時間外手当
-
同棲時の家賃について
-
失業保険のキャンセルについて...
-
「とは言え」と「と言えども」...
-
北海道期限付教員の退職金
-
学校の講師は、失業保険のよう...
-
失業保険がもらえるかどうか。
-
雇用保険説明会・初回認定日は...
-
扶養手当も家族手当もない会社...
-
失業保険受給中の人を 外注とし...
-
雇用保険受給資格者証
-
就労可能証明書の書き方について
-
失業中何していましたか? 20代...
-
退職勧奨で会社都合で退職しま...
-
失業保険を取り下げる事は出来...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
企業価値算定のターミナルバリ...
-
期間重複チェック。コード以外...
-
失業手当受給の申請期間
-
失業保険の不正受給行為について
-
訪問看護の指示書の期間について
-
待機期間中に内定を受けた場合...
-
70歳以上の雇用保険について
-
離職票1・2を原本でなくコピー...
-
就労可能証明書の書き方について
-
1週間で退職したら、離職票が出...
-
雇用保険受給資格者証
-
住居手当をもらう方法(親の家...
-
失業保険について 失業保険受給...
-
休業損損害証明書について
-
失業保険のキャンセルについて...
-
学校の講師は、失業保険のよう...
-
再就職手当申請書 賃金月額欄に...
-
扶養に入ったまま失業給付を受...
-
扶養手当も家族手当もない会社...
-
失業中何していましたか? 20代...
おすすめ情報