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

时间:2015-08-21 11:10:45

标签: excel vba 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

(假设潮汐时间(第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列。

出于某种原因,这不起作用。我不知道为什么,我有点困惑。任何人都可以提出更好的方法或指出我的错误吗? 提前谢谢!

2 个答案:

答案 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

enter image description here

答案 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),""))))