Excel VBA,根据其他数据确定要填写的行

所以我有两个这样的表格:
(假设潮汐时间(第1表)是A列)
(潮高(第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 

这个想法是根据表2中列C中写入的值在表1中的正确位置处填写值。这就是我设想的:

 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列的时间。
所以如果是真的
这必须是相应的时间,所以把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 

在这里输入图像说明