У меня есть уникальная ситуация, не охваченная другой статьей, которую я могу найти здесь. У меня есть книги из десятков тысяч строк, но все они в основном так:VBA для удаления X экземпляров данных на основе набора дат
Там целая много «материала» происходит в книге и данных постоянно пополняется, но Суть моей проблемы в том, что мне нужна часть кода, чтобы иметь возможность хранить определенное количество последних экземпляров данных (скажем 2) и удалять остальные. Я не часто встречаюсь с датами в VBA, поэтому мне хотелось бы «показать свою работу» до сих пор, но я действительно не знаю, с чего начать.
Простым английским: подсчитайте количество уникальных дат в столбце D. Если это число> 2, THEN удалите строки, в которых дата старше, чем две последние даты.
Опять же, прошу прощения за то, что у меня пока нет работы. У меня действительно есть «блок писателей» на этом. Любая помощь приветствуется!
ОБНОВЛЕНИЕ: С помощью комментариев я написал следующее, чтобы сделать первый шаг, чтобы найти вторую самую последнюю дату в моей реальной спецификации (35000+ строк), где столбец даты - P. Я должен быть что-то не так, потому что, когда я отслеживаю значение OldMax в окне locals, он возвращает только самую последнюю дату, независимо от того, что я ввел для числа в Large(DateRange,whatever number)
. Hmmmmm ....
Sub Remove_Old_Data()
Dim wks As Worksheet
Dim OldMax As String
Dim DateRange As Range
Dim lrow As Long
Set wks = ThisWorkbook.Worksheets("X-AotA")
lrow = wks.Cells(Rows.Count, "P").End(xlUp).Row
Set DateRange = wks.Range("P2:P" & lrow)
OldMax = Application.WorksheetFunction.Large(DateRange, 2)
End Sub
Не могли бы вы просто отсортировать данные по возрастанию, а затем просто удалить то, что не требуется? –
Определенно, но эта конкретная процедура находится в середине большого макроса, который импортирует, анализирует и перемешивает вещи вокруг. Поэтому мне пришлось бы завершить макрос для вмешательства человека и ручного удаления - я думаю, это то, что вы предлагали. – rushjc
В этом случае запишите макрос для сортировки данных на Col D и найдите нижние две даты, а затем удалите все строки выше этого: –