こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VB.net 登録されている日付の連続性のチェック

VB.netについて質問です。
下記のようにデータがあったとします。
_________
日付、コード
1/1、******
1/1、******
1/2、******
1/2、******
1/2、******
1/4、******
1/4、******
1/7、******
1/11、******



_______

登録されていない日付があったときにメッセージを出したいです。
下記のコーディングでは
1/4~1/7の間で(2日連続登録されていない)
1/5、1/6は登録されていません。まで出すのが精一杯です。

______________________________
'登録されていない日があったときメッセージを出す
For i = 0 To DataGridView.RowCount - 2
Dim kyou As Date = DataGridView.Rows(i).Cells(0).Value
Dim tsugi As Date = DataGridView.Rows(i + 1).Cells(0).Value
Dim ashita As Date = kyou.AddDays(1)
Dim asatte As Date = ashita.AddDays(1)
Dim shiasatte As Date = asatte.AddDays(1)

'2日連続登録データが抜けていたときまでのチェック
If kyou = tsugi Or tsugi = ashita Then
Else
If tsugi = asatte Then
MsgBox(ashita & "が未登録です")
Else
If tsugi = shiasatte Then
MsgBox(ashita & "と" & asatte & "が未登録です")
End If

End If

End If

Next

______________________________

どんなに日にち離れていても対応できるようなコーディングを教えて欲しいです。

よろしくお願いいたします。

投稿日時 - 2018-10-06 19:42:42

QNo.9544898

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>できなかったです~><
ありゃ。私がポカしてそうです。

 Dim i As Long
 Dim AdCnt As Long
 
 For i = 0 To DataGridView.RowCount - 2
  AdCnt = 0
  Do
   AdCnt = AdCnt + 1
   If DataGridView.Rows(i).Cells(0).Value + AdCnt < _
     DataGridView.Rows(i + 1).Cells(0).Value Then
    MsgBox Format(DataGridView.Rows(i).Cells(0).Value + AdCnt, "YYYY/MM/DD") & _
     "が未登録です"
   Else
    Exit Do
   End If
  Loop
 Next

これでもNGなら、どのようにアカンか、説明してみてください。

投稿日時 - 2018-10-10 22:21:55

ANo.2

これって、1カ月の中に、必ず日は存在するのでしょうか?つまり無い月は存在しないのでしょうか? あと年の情報はどのような範囲になるのでしょうか?掲載されている日付は、月/日のみであり、年が不明です。いつの年月なのか解らないと判定ができないと思います。たとえば、同じ月でも閏年も考慮しなければならないですね?また、指定されている日付は1カ月分なのでしょうか?それとも、1年分で抜けている日を得たいのでしょうか?

投稿日時 - 2018-10-10 20:45:41

ANo.1

こんな感じでしょうか。
(手元に環境がないので未確認です。)
(文法チェックすら行っていません)

 Dim i As Long
 Dim AdCnt As Long
 
 For i = 0 To DataGridView.RowCount - 2
  AdCnt = 0
  Do
   AdCnt = AdCnt + 1
   If DataGridView.Rows(i).Cells(0).Value + AdCnt <> _
     DataGridView.Rows(i + 1).Cells(0).Value Then
    MsgBox Format(DataGridView.Rows(i).Cells(0).Value + AdCnt, "YYYY/MM/DD") & _
     "が未登録です"
   Else
    Exit Do
   End If
  Loop
 Next

投稿日時 - 2018-10-07 14:46:40

お礼

できなかったです~><

投稿日時 - 2018-10-09 15:32:49

あなたにオススメの質問