• 締切済み

期間重複チェック。コード以外での回答はご遠慮下さい

期間重複チェック。コード以外での回答は遠慮下さい 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のカテゴリでも同じような 質問をしたのですがプログラムコードの回答が得られず 困っています。プログラマに向いていないというような 回答も見受けられましたがどうしても プログラムコードでの回答がほしいです 皆さんお忙しい中申し訳ありませんが プログラムコードでのご回答をお願いいたします。 コード以外でのご回答はご遠慮ください 私はこの仕事に向いていないのでしょうか 毎日つらいです。

みんなの回答

回答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つも表示しなかった場合だけ」だと言うのを判っていましたか? >日本語を理解する能力が不足しているために度々先輩に怒られます。 だとすると、どの職業に就いても同じように苦労すると思われます。「プログラマーに向いてない」と言うより「考えるのに向いてない」のだと思います。 芸術家とか、音楽家とか、クリエィティブな仕事だと、上手く行くような気がします。 なお、脳梁部部分欠損症などで、軽度の高次脳機能障害があると、日本語を理解する能力が不足したりするので、一度、専門医に精密検査してもらう事をお薦めします。

tkwavek
質問者

お礼

何度もご回答いただきありがとうございました。 もう一つ教えて欲しいことがあるのですが 貴方様が作成したプログラムに 期間(1) txtstartdate1.textとtxtenddate1.textは 必須入力で 期間(2) txtstartdate2.textとtxtenddate2.textは任意入力 期間(3) txtstartdate3.textとtxtenddate3.textは任意入力 開始が入力されたら必ず終了も入力するという 仕様が抜けていました。 大変いいずらいのですがお力をおかし願いませんでしょうか よろしくお願いいたします。

tkwavek
質問者

補足

現在、貴方様がつくられたプログラムですと 期間(1)~期間(3)全て入力されていないと(""があると重複となる) 必ず重複となってしまいます。 そこの部分をお礼に欄に書いた仕様追加したコードをご回答願えませんでしょうか わがままをいって大変申し訳ありません

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.5

No.3 >1.期間の組み合わせとしては以下があります。 改めて考えてみた所、ケース(6)がありました。 それは、宿題としますので自分で考えてみて下さい。 #テストケースを作る時に必要です。

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.4

No.3 誤:(2)期間2Start < 期間1End -> 重複無し 正:(2)期間2Start > 期間1End -> 重複無し

  • don_go
  • ベストアンサー率31% (336/1059)
回答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://okwave.jp/qa/q7890398.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のレジスタにロードする」って感じの所まで究極に細分化すれば、アセンブラで書く事だって可能です。

tkwavek
質問者

お礼

ご回答度々いただきありがとうございます。 日本語を理解する能力が不足しているために度々先輩に怒られます。 今回も詳しい説明をいただいているにもかかわらず理解力不足のため ?が残ります。この仕事に向いていないのかもしれません。 よくわかっています。馬鹿だなって思い自信が全く持てません。 まことにいいにくいのですが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 以上。

tkwavek
質問者

お礼

お忙しい中長文でのご回答ありがとうございました。 貴方様がおっしゃる様にコードを並べたのでが並べるだけではだめなようです。 単純に上からコードを記述したらメッセージボックスが何回も出力されてしまいました。 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

専門家に質問してみよう