Вы можете сделать все в одном цикле. Цикл работает, пока ничего не найдено:
Option Explicit
Sub ProcedureName()
Dim RangeToSearch As Range
Set RangeToSearch = Worksheets("Sheet1").Range("A1", Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp))
Dim i As Long
i = 1
Do
Dim FoundRange As Range
Set FoundRange = RangeToSearch.Find(What:="Date d'Evaluation(" & i & "):", LookAt:=xlPart)
If Not FoundRange Is Nothing Then
Dim FoundDate As Variant
FoundDate = Split(Right$(FoundRange.Value, Len(FoundRange.Value) - 22), "/")
Worksheets("Sheet2").Range("B5").Offset(ColumnOffset:=i - 1).Value = DateSerial(FoundDate(2), FoundDate(1), FoundDate(0))
End If
i = i + 1
Loop Until FoundRange Is Nothing
End Sub
Обратите внимание, что в метод Find
необходимо включить LookAt:=xlPart
. В противном случае Excel использует метод, который последний раз использовался Excel (и вы никогда не знаете, какой это был).
Я использовал Split
, чтобы разбить найденную дату, например, 02/04/2024
в массив:
FoundDate(0) = "02"
FoundDate(1) = "04"
FoundDate(2) = "2024"
чтобы мы могли преобразовать ее в реальную дату с помощью DateSerial
DateSerial(FoundDate(2), FoundDate(1), FoundDate(0))
для DD/MM/YYYY
DateSerial(FoundDate(2), FoundDate(0), FoundDate(1))
для MM/DD/YYYY