Поиск местоположений даты в 100K плюс ряд Эффективность таблиц

Вчера была хорошая помощь некоторых великих людей. Я экстраполировал его и хотел спросить, знает ли кто-нибудь более эффективные способы сделать это. Поиск местоположений даты начала очень эффективен, так как это почти 3 строки кода, но поиск конечных дат немного сложнее, потому что он находит первый экземпляр даты и затем выполняет итерацию по циклу до тех пор, пока он не достигнет конца, что неэффективно по очевидным причинам. Это две отдельные функции (одна, чтобы найти начальные строки даты и одну, чтобы найти последнюю строку даты окончания. У кого-нибудь есть идеи?

ПРИМЕЧАНИЕ. Дата начала не совпадает с датой окончания. Обычно в месяц (2/1/14) (2/28/14)

Есть путаница в отношении того, что мои даты начала и даты окончания. Извиняюсь. dateToAnalyze – это параметр, который получает дату из основного юзера. Первая функция «GetStartLocations» находит дату начала, которая передается ему в электронной таблице. Оставаться в соответствии с датами, которые я ставлю вверх. Дата начала (2/1/14) будет передана в GetStartLocations, и дата окончания (2/28/14) будет передана GetEndLocations.

Эти функции предназначены только для того, чтобы в конечном счете найти местоположение строки даты, в которую оно было передано. Если он не находит дату … а не ошибку … она увеличивает вперед, чтобы найти следующую ближайшую дату. Это отлично работает для функции GetStartLocations, но не так хорошо подходит для конечного местоположения, потому что оно может постепенно увеличиваться до нужной даты окончания.

Public Function GetStartLocations(dateToAnalyze As Range, masterList As Worksheet) As Long Dim finderCounter As Integer Dim finder As Range finderCounter = 0 Do Set finder = masterList.Range("A:A").Find(dateToAnalyze.Value + finderCounter, LookIn:=xlValues, LookAt:=xlWhole) finderCounter = finderCounter + 1 Loop Until Not finder Is Nothing GetStartLocations = finder.Row End Function Public Function GetEndLocations(dateToAnalyze As Range, masterList As Worksheet) As Long 'Seperate function for End location required since the find function finds the first instance of date being searched Dim finderCounter As Integer Dim finder As Range Dim location As Long finderCounter = 0 'Finds initial date in master list...If date is not found..increments upwards until it finds next nearest date sucessfully Do Set finder = masterList.Range("A:A").Find(dateToAnalyze.Value + finderCounter, LookIn:=xlValues, LookAt:=xlWhole) finderCounter = finderCounter + 1 Loop Until Not finder Is Nothing location = finder.Row Do DoEvents location = location + 1 Loop Until Range("A" & location).Value <> Range("A" & (location + 1)).Value GetEndLocations = location End Function 

Если дата окончания – это просто последнее вхождение даты начала использования,

 ... SearchDirection:=xlPrevious, After:=masterList.Range("A"&rows.count) 

… перемещаться назад вокруг рабочего листа и начинать снизу, чтобы посмотреть вверх.

Поиск не может быть самым эффективным методом использования. Часто чтение в массив вариантов или использование функции Worksheet.MATCH может быть быстрее.
Для обсуждения плюсов и минусов различных подходов см. https://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance-shootout/

Давайте будем гением компьютера.