所以我有两张这样的表:
(假设潮汐时间(第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
(假设潮汐时间(第2表)是C列)
(潮汐高度(第2表)是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列。
出于某种原因,这不起作用。我不知道为什么,我有点困惑。任何人都可以提出更好的方法或指出我的错误吗? 提前谢谢!
答案 0 :(得分:2)
只需使用双循环:
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
答案 1 :(得分:2)
以下是使用多个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),""))))