У меня есть рабочий лист «Данные», в котором хранится множество данных. У него 17 столбцов AQ, а в столбце G указана дата, обозначающая дд / мм / гггг. У меня есть отдельная рабочая таблица под названием «NoEntry», и здесь я бы хотел, чтобы даты вводились пользователем (начальная дата L15 и конечная дата в L16), и после того, как кнопка нажала все данные между, включая начало идата окончания войдет в другую рабочую таблицу с именем «DateData».
Код у меня ниже вид работ. Проблема в том, что по каким-то причинам данные, передаваемые через них, неверны. Во-первых, не все данные находятся в пределах границ - некоторые копируются с датами, предшествующими «дате начала». Другое дело, что в данных есть пустые записи (у AF есть данные, и далее пусто), и некоторые из них также копируются - даже при том, что у них нет даты.
Я чувствую, что либо это не правильно зацикливаетсячерез все записи или, возможно, его проблема форматирования. Возможно, есть способ преобразовать все столбцы даты в определенный формат, прежде чем он будет выполнять копирование - должен быть дд / мм / гггг. Или это может быть что-то, чего мне не хватает?
из тестирования кажется, что прошла только одна запись, предшествующая дате начала, но пустые данные все еще копируются в течение даты, использованной с 16.09.2009 по 10.10 2019
Любая помощь будет высоко ценится,
Спасибо:)
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Dim wsData As Worksheet, wsDate As Worksheet, wsNoEntry As Worksheet
Dim dSDate As Date, dEDate As Date
Dim lRowStart As Long, lRowEnd As Long
Dim aData() As Variant
Dim i As Long
'set the worksheet objects
Set wsData = ThisWorkbook.Sheets("Data")
Set wsDate = ThisWorkbook.Sheets("DateData")
Set wsNoEntry = ThisWorkbook.Sheets("NoEntry")
'required variables
dSDate = wsNoEntry.Range("L15").Value
dEDate = wsNoEntry.Range("L16").Value
'set the array - you can make this dynamic!
aData = wsData.Range("A1:Z1000").Value
'for loop to find start
For i = 1 To 1000
If aData(i, 7) = dSDate Then
lRowStart = i
Debug.Print "Start row = " & lRowStart
Exit For
End If
Next i
'now loop backwards to find end date
For i = 1000 To 1 Step -1
If aData(i, 7) = dEDate Then
lRowEnd = i
Debug.Print "End row = " & lRowEnd
Exit For
End If
Next i
'now we have start and end dates
'going to use copy/ paste for simplicity
wsData.Range("A" & lRowStart, "Z" & lRowEnd).Copy
'paste in date sheet
wsDate.Range("A1").PasteSpecial Paste:=xlPasteValues
'clear clipboard
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Вход
Выход - затемненныйиз-за личной информации (дата G5 не должна быть там, и вы можете увидеть пробелы