Excel VBA, определение строки для заполнения на основе других данных

Поэтому у меня есть две таблицы:
(Предположим, что приливное время (1-я таблица) – столбец А)
(Высота прилива (1-я таблица) – столбец B)

Tidal Time Tidal Height 00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00 

(Предположим, что приливное время (вторая таблица) – столбец C)
(Высота прилива (вторая таблица) – столбец D)

 Tidal Time Tidal height 04:16 1.6 m 10:24 4.8 m 16:31 1.7 m 22:38 4.7 m 

Идея состоит в том, чтобы заполнить значение в правильном месте в таблице 1 на основе значения, указанного в столбце C в таблице 2. Вот как я это себе представлял:

 If (Sheets("Vessels").Range("A10").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A11") > Sheets("Vessels").Range("C9")) Then Sheets("Vessels").Range("B10") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A11").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A12") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B11") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A12").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A13") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B12") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A13").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A14") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B13") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A14").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A15") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B14") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A15").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A16") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B15") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A16").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A17") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B16") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A17").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A18") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B17") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A18").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A19") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B18") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A19").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A20") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B19") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A20").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A21") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B20") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A21").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A22") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B21") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A22").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A23") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B22") = Sheets("Vessels").Range("D9") ElseIf (Sheets("Vessels").Range("A23").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A24") > Sheets("Vessels").Range("B10")) Then Sheets("Vessels").Range("B23") = Sheets("Vessels").Range("D9") End If 

Идея кода: время в столбце A меньше времени в столбце C, а следующий раз в столбце A выше, чем время в столбце C.
Поэтому, если true:
Это должно быть время, вызывающее коррозию, поэтому заполните значение D (которое находится рядом с временем в C) в колонке B в этой строке.

По какой-то причине это просто не работает. Я понятия не имею, почему, и я немного смущен. Может ли кто-нибудь придумать лучший способ или указать на мои ошибки?
Заранее спасибо!

Ниже приведена функция, написанная с использованием нескольких функций excel. То же самое, что и цикл с помощью кода vba. Ниже приведена формула, которая должна быть вставлена ​​в ячейку B2, а затем вытащить содержимое ячейки до конца значений столбца A. =IF(AND(A1<C$2,C$2<A2),VLOOKUP(C$2,C:D,2,0),IF(AND(A1<C$3,C$3<A2),VLOOKUP(C$3,C:D,2,0),IF(AND(A1<C$4,C$4<A2),VLOOKUP(C$4,C:D,2,0),IF(AND(A1<C$5,C$5<A2),VLOOKUP(C$5,C:D,2,0),""))))

Просто используйте двойной цикл:

 Sub Demo() Dim i As Long, j As Long, t As Date, v As String For i = 2 To 5 t = Cells(i, "C").Value v = Cells(i, "D").Value For j = 3 To 25 If t > Cells(j - 1, "A").Value And t < Cells(j, "A").Value Then Cells(j, "B").Value = v End If Next j Next i End Sub 

введите описание изображения здесь

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