Acid Burn, быстрее будет если обрабатывать единый массив с данными. Скажем макрос пройдется по диапазону, обработает каждую строку, занесет результаты обработки с массив и далее этот массив выгрузить в столбец.
До кучи набросал мелкую функцию по поиску максимально допустимого значения в строке, которое можно интерпретировать как год с примером ее использования:
Скрытый текст |
---|
Не листовая функция.
Код |
---|
Sub aaa()
Dim aa As Range, arr(), a&, b&, yy%, ns%
With Sheets(1)
For Each aa In Intersect(.Columns(2), .UsedRange)
If YFind(aa.Value, yy, ns) Then
a = a + 1: ReDim Preserve arr(1 To a): arr(a) = Array(yy, ns)
End If
Next
End With
End Sub
'----------------------------------------------------
Private Function YFind(txt$, yy%, ns%) As Boolean
Dim a&, b&, c&, dt$, d%
If Len(txt) < 4 Then Exit Function
c = DatePart("yyyy", Date): b = 0
For a = 1 To Len(txt) - 3
dt = Mid$(txt, a, 4)
If dt Like "####" Then
d = CInt(dt)
If d <= c Then
If d > 1980 Then
If d > b Then b = d: ns = a
End If
End If
End If
Next
If b > 0 Then yy = b: YFind = True
End Function
|
Неявно функция возвращает результат поиска: год - yy, позицию в строке - ns. Алгоритм примитивный, лучше скакать по разделителям в виде пробелов и прочих символов в строке. |