私のコードは、ユーザーがExcelシートに入力した開始日と終了日を見つけて、ユーザーが入力した日付の期間の製品変換の数を見つけることができるようにすることです. ユーザーが行に存在する開始日と終了日を入力した場合は問題ありません。問題は、ユーザーが行に存在しない開始日と終了日を入力すると、製品コンバージョン数 = 0 になることです。たとえば、私のデータは 2013 年 1 月 2 日から 2013 年 1 月 28 日までの日付で構成されており、10 個の製品が変換されています。しかし、ユーザーが開始日 = 1/1/2013、終了日 = 1/29/2013 (行に存在しない日付) を入力すると、変換の数は 0 です。私がやりたいことは、日付がそうでない場合です行に存在する場合、プログラムは自動的に最も近い日付にジャンプします。ここに私のコードがあります:
Dim rowFound As Variant
Dim startDate As String, endDate As String, startDateRow As Long
Dim endDateRow As Long, product As String, convNo As Long
Set ws2 = ActiveWorkbook.Sheets("Products Conversion")
Set wsMain = ActiveWorkbook.Sheets("Main Menu")
ws2.Activate
lastrow2 = ws2.Range(Range("A1"), Range("A65535").End(xlUp)).count ' find lastrow
wsMain.Activate
startDate = Me.txtStartDate.Value
endDate = Me.txtEndDate.Value
On Error Resume Next
If txtStartDate <> "" Or txtEndDate <> "" Then
For i = 3 To lastrow2
If CDate(startDate) = ws2.Cells(i, 1).Value Then
startDateRow = i ' row where start date is
Exit For
End If
Next
For j = lastrow2 To 3 Step -1
If CDate(endDate) = ws2.Cells(j, 1).Value Then
endDateRow = j ' row where end date is
Exit For
End If
Next
For k = startDateRow To endDateRow - 1
product = ws2.Cells(k, 6).Value
If product <> ws2.Cells(k + 1, 6).Value Then
convNo = convNo + 1 'number of conversion
End If
Next
Else
MsgBox "Please enter both date!", vbOKOnly + vbCritical
End If
Me.txtConvNo.Value = convNo