попробуйте это.Я проверил это, и это работает.Позвольте мне объяснить настройки, так как вы не предоставили пример вашего формата.В этом макросе есть два листа, лист 1 содержит даты в столбце 1 и значения в столбце 2. Обратите внимание, что вы должны располагать даты в порядке возрастания, то есть строка 1 имеет самую старую дату, затем следует следующая ближайшая дата вкалендарь, и в самом низу должна быть самая последняя дата.
Лист2 содержит различные даты, которые вы хотите получить значения из листа1.Я предположил, что первая дата, которую вы хотите найти, начинается в столбце Row1 на Sheet2, и вы можете искать столько дат, сколько хотите.
Логика такова: начиная с первой ячейки в sheet2, для каждойячейка в столбце 1 sheet2, сравните дату с начальным столбцом 1 строки 1 sheet1, который является самым старым, если значение ниже, то макрос извлекает значение, если оно не ниже, то ищет следующую ячейку в sheet1 и т. д.... надеюсь, это поможет
Sub findMinValue()
Dim lastrow1 As Long, lastrow2 As Long
Dim ws1 As Worksheet, ws2 As Worksheet
Dim i As Integer, ii As Integer
Set ws1 = Worksheets("sheet1")
Set ws2 = Worksheets("sheet2")
lastrow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
lastrow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
ws2.Select
For ii = 1 To lastrow2
For i = 1 To lastrow1
If ws2.Cells(ii, 1) < ws1.Cells(i, 1) Then
ws2.Cells(ii, 2).Value = ws1.Cells(i, 2).Value
Exit For
Else 'do nothing
End If
Next i
Next ii
End Sub