• 締切済み

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 ______________________________ どんなに日にち離れていても対応できるようなコーディングを教えて欲しいです。 よろしくお願いいたします。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.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なら、どのようにアカンか、説明してみてください。

回答No.2

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

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.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

hatanankayuta
質問者

お礼

できなかったです~><

関連するQ&A

  • 連続して同じ値が入ってるなら削除したいのですが

    指定した値なおかつ連続して同じ値が入ってるなら削除したいのですが A列に 紅葉 紅葉 桜 桜 紅葉 とはいっていて、 Sub Sample() Dim i As Long Dim mystr As String mystr = "桜" For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1 If Cells(i, 1) = Cells(i - 1, 1) = mystr Then Rows(i).Delete End If Next i End Sub をしても、削除されません。 4行目の桜が削除されてもいいと思うのですが コードのどこが間違えてますか?

  • VB2005でExcelファイルを開く

    こんにちは。 VB2005の勉強をさせて頂いています。 ボタンを押すとコモンダイヤログを表示し、 ダイヤログ内で選択したExcelファイルの内容をフォームのDataGridViewにもって行きたいと思っていますが 上手くできません。一応現在のソースを下記に置いておきます。 特に、下記のソースの 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next のループ条件xlSheet.Rows.Count - 1がどうも6万くらいになっているようなのですが、 実際セルに入力したデータは5行程度のものです。 1セル1セル文字が入っているかどうかを調べていかないといけないのでしょうか? よろしければ、具体的なソースやアドバイスをお願いいたします。 -------------------------------------- Dim ofd As New OpenFileDialog() 'ofdの設定をする 'ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If ofd.ShowDialog() = DialogResult.OK Then '選択されたファイルを読み取り専用で開く Dim ReadFile As System.IO.Stream ReadFile = ofd.OpenFile() If Not (ReadFile Is Nothing) Then Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks '既存ファイルを開く場合 Dim xlFilePath As String = ofd.FileName Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next 'xlSheet の解放 'xlSheets の解放 'xlBook を閉じる 'xlBook の解放 'xlBooks の解放 'Excelを閉じる 'xlApp を解放 End If End If ofd.Dispose()

  • 【Excelマクロ】もっと頭の良い書き方って無いかな?

    5行空白列があったらそこで処理を終わりたいんですが、もっといい書き方はないでしょうか? 下記が私の考えた頭の悪いやり方です。 Sub macro() Dim i As Integer For i = 1 To 1000 If Cells(i, 1) = "" Then  If Cells(i + 1, 1) = "" Then   If Cells(i + 2, 1) = "" Then    If Cells(i + 3, 1) = "" Then     If Cells(i + 4, 1) = "" Then      If Cells(i + 5, 1) = "" Then       MsgBox (i - 1 & "行目で終わりです")       Exit For      End If     End If    End If   End If  End If End If Next End Sub

  • マクロで複数の行をまとめて切り取りする方法

    Iの列のセルに「テスト」があったら、その行を切り取ってシート2に貼り付ける といった流れのコードが下記です。 Sub 切り取り() Dim i, LastRow As Long LastRow = Cells(Rows.Count, 9).End(xlUp).Row For i = 1 To LastRow If Cells(i, 9) = “テスト” Then Rows(i).Cut Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If Next i End Sub ●Iの列のセルに「テスト」と「課題」があったら、その行を切り取ってシート2に貼り付ける といったものをしたいのです。 1. If Cells(i, 9) = “テスト” Then ↓ If Cells(i, 9) = “テスト,課題” Then 結果エラー 2. If Cells(i, 9) = “テスト” Then ↓ If Cells(i, 9) = “テスト&課題” Then 結果エラー 正常なコードを教えてくださいますか? 宜しくお願いします。

  • エクセル 最終行からの連続コピー

    * すぐに回答を! エクセルC20からI51までデータを1日1行ずつ入力します。 データが入力されている最終行から上に連続する10行(最終行含む)をコピーしたいのですが、最終行から10行上をどのように認識させたらいいのか、わかりません。Offsetなど試してみましたがダメでした。 よろしくお願いします。 Sub dataコピー() Dim i As Long Dim j As Integer Dim rng As Range '最後尾から10行前までを選択 With Worksheets("月").Range(Cells(20, 3), Cells(51, 10)) For i = Cells(Rows.Count, 1).End(xlUp).Row To -10? If rng Is Nothing Then Set rng = .Rows(i) End If j = j + 1 If j >= 10 Then Exit For Next i 'コピー If Not rng Is Nothing Then rng.Copy Range("M1") Beep Else MsgBox "該当行は存在しません。", 48 End If End With Set rng = Nothing End Sub コードはこちらを参考にしました ​http://questionbox.jp.msn.com/qa5440189.html

  • 日付が同じなら削除

    すみません、誰か教えて頂けませんでしょうか。 A列に日付と時間が記入されているのですが、日付だけを比較して 同じなら削除したいのですが、誰かご教授頂けませんでしょうか。 A列 2013/8/14 8:00 2013/8/14 8:15 2013/8/14 10:00 2013/8/15 8:00 2013/8/16 8:00 2013/8/17 8:00 2013/8/17 20:00 2013/8/18 8:00 2013/8/18 9:00 A列 2013/8/14 8:00 2013/8/15 8:00 2013/8/16 8:00 2013/8/17 8:00 2013/8/18 8:00 Sub 削除 () Dim r As Long Dim y As Long r = Cells(Rows.Count,1).End(xlUp).Row For y = r To 1 Step -1 If Cells(y,1).Value = Cells(y,1).Offset(1,0) Then 'この比較がわかりません。 Cells(y,1).Offset(1,0).Delete(xlUp) End If Next y End Sub すみませんが、宜しくお願いします。

  • VBAで教えてください。

    データがないときはExitSubしたいのですが、何処に記述すれば良いでしょうか? Sub 削除() Dim i As Long If MsgBox("データを削除します。よろしいですか?", vbYesNo) = vbYes Then Sheets("リスト").Select i = 5 Do Until i = 200 If Cells(i, 5).Value = Sheets("マスタ登録").Range("D5") Then Cells(i, 1).EntireRow.Delete End If i = i + 1 Loop Else Exit Sub End If End Sub

  • エクセル2010でマクロが動きません

    こんにちは。 マクロ超初心者です。 頑張ってエクセル2016でマクロ作成しましたが、エクセル2010で途中から動かず…。 何が悪いんでしょうか… ここから動きません…と書いたところから動きません(涙) Private Sub シート編集_Click() Application.ScreenUpdating = False Dim i Dim Sh1 As Worksheet Dim Sh2 As Worksheet Dim Sh4 As Worksheet Set Sh1 = Worksheets("あ") Set Sh2 = Worksheets("い") Set Sh4 = Worksheets("う") Dim dayCutoff As Date dayCutoff = Application.InputBox("年月日を入力してください", "お支払期限 年月日を入力", Format(Date, "yyyy/mm/dd")) Sh4.Range("D12").Value = DateSerial(Year(dayCutoff), Month(dayCutoff) + 2, 0) 'お支払期限 dayCutoff = Application.InputBox("年月日を入力してください", "請求書発行 日を入力", Format(Date, "yyyy/mm/dd")) Sh4.Range("AC3").Value = Format(Date, "yyyy/mm/dd") '発行日 Sh1.Cells.Clear With Sh1 'edit .Range("A2") = "番号" .Range("B2") = "会社名" .Range("C2") = "判定" .Range("D2") = "契約番号" .Range("E2") = "拠点" .Range("F2") = "税率" .Range("G2") = "月額(税抜)" .Range("H2") = "消費税" .Range("I2") = "月額(税込)" .Range("J2") = "今回" .Range("K2") = "全回" .Range("L2") = "店番" ここから動きません………… For i = 3 To Sh2.Cells(.Rows.Count, 1).End(xlUp).Row .Cells(i, 1) = Sh2.Cells(i, 2) .Cells(i, 2) = Sh2.Cells(i, 4) .Cells(i, 4) = Sh2.Cells(i, 3) .Cells(i, 5) = Sh2.Cells(i, 4) & "(" & Sh2.Cells(i, 6) & ")" .Cells(i, 6) = Sh2.Cells(i, 9) & "%課税" .Cells(i, 7) = Sh2.Cells(i, 8) .Cells(i, 8) = Sh2.Cells(i, 10) .Cells(i, 9) = Sh2.Cells(i, 11) .Cells(i, 10) = Sh2.Cells(i, 12) .Cells(i, 11) = Sh2.Cells(i, 7) .Cells(i, 12) = Sh2.Cells(i, 2) If Sh1.Cells(i, 10) > Sh1.Cells(i, 11) Then .Cells(i, 3) = "×" Else .Cells(i, 3) = "〇" End If If Sh1.Cells(i, 3) = "×" Then .Cells(i, 2) = "" End If Next i End With '空白行を削除 Dim j As Integer, myFlag As Boolean Dim c As Range With Worksheets("edit").Range("A2").CurrentRegion For j = .Rows.Count To 2 Step -1 myFlag = False For Each c In .Cells(j, 2) If c.Value <> "" Then myFlag = True Exit For End If Next If myFlag = False Then .Rows(j).Delete End If Next End With MsgBox "データの転記が終わりました" End Sub

  • エクセル 最終行からの連続コピー

    エクセルで最終行から上に連続する10行(最終行含む)をコピーしたいです。 途中、空白行が含まれている場合でも、最終行を特定し、コピーできるようにするには、下記のコードにどう手を加えたらよいでしょうか? どなたかアドバイスをお願いします。 Sub Test()   Dim i As Long   Dim j As Integer   Dim rng As Range   With ActiveSheet     'フィルタ     .Range("A1").CurrentRegion.AutoFilter Field:=1          '行選択     With .AutoFilter.Range       For i = .Cells(.Cells.Count).Row To 2 Step -1         If .Rows(i).Hidden = False Then           If rng Is Nothing Then             Set rng = .Rows(i)           Else             Set rng = Union(rng, .Rows(i))           End If           j = j + 1         End If         If j >= 10 Then Exit For       Next i       'コピー       If Not rng Is Nothing Then         rng.Copy Worksheets("Sheet2").Range("A1")         Beep       Else         MsgBox "該当行は存在しません。", 48       End If     End With   End With   Set rng = Nothing なお、コードはこちらを参考にさせていただきました。 http://okwave.jp/qa3552420.html?ans_count_asc=1

  • 日付のカ増減は特に行っていません

    参考日が個々でバラバラのため、セルを下に順繰りに送って基準日と照らし合わせる形をとっています。 下記に簡素ではありますが、プロシージャを貼り付けて置きます。 ご回答いただければ助かります Sub ranking() Dim o As Integer Dim Date1 As Date, Date2 As Date o = 5 Date2 = wsFrom.Cells(16, 3) Date1 = wsFrom.Cells(o, 6)←こちらはきちんとセルごとの参考日が代入されている ↑ここのデータ変数が変わらない Do While Cells(3, o) <> "" If DateDiff("m", Date1, Date2) > 0 Then    Cells(7,o).Copy Cells(12,o).paste Else    Cells(7,o).Copy Cells(14,o).paste End If o = o + 1 Loop End Sub

専門家に質問してみよう