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

Excel VBA,根据其他数据确定要填写的行,vba,excel,Vba,Excel,我有两张这样的桌子: (假设潮汐时间(第一个表)为A列) (潮位高度(表1)为B列) (假设潮汐时间(第二个表)为C列) (潮位高度(第二表)为D列) 这样做的目的是根据表2 C列中的数值,在表1的正确位置填写数值。 这就是我的设想: If (Sheets("Vessels").Range("A10").Value < Sheets("Vessels").Range("C9")) And (Sheets("Vessels").Range("A11") > Sheets("Vessel

我有两张这样的桌子:
(假设潮汐时间(第一个表)为A列)
(潮位高度(表1)为B列)

(假设潮汐时间(第二个表)为C列)
(潮位高度(第二表)为D列)

这样做的目的是根据表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
如果(板材(“容器”)范围(“A10”)值<板材(“容器”)范围(“C9”)和(板材(“容器”)范围(“A11”)>板材(“容器”)范围(“C9”)),则
板材(“容器”)范围(“B10”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A11”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A12”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B11”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A12”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A13”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B12”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A13”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A14”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B13”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A14”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A15”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B14”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A15”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A16”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B15”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A16”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A17”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B16”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A17”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A18”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B17”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A18”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A19”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B18”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A19”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A20”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B19”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A20”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A21”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B20”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A21”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A22”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B21”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A22”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A23”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B22”)=板材(“容器”)范围(“D9”)
ElseIf(板材(“容器”).范围(“A23”).值<板材(“容器”).范围(“C9”))和(板材(“容器”).范围(“A24”)>板材(“容器”).范围(“B10”))
板材(“容器”)范围(“B23”)=板材(“容器”)范围(“D9”)
如果结束
代码背后的想法: A列中的时间低于C列中的时间,A列中的下一次下降时间高于C列中的时间。
因此,如果为真:
这必须是腐蚀时间,因此将D中的值(即C中时间的旁边)填入此行的B列

出于某种原因,这根本不起作用。我不知道为什么,我有点困惑。有谁能想出更好的办法或指出我的错误吗?

提前谢谢你

只需使用双循环:

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
子演示()
尺寸i为长,j为长,t为日期,v为字符串
对于i=2到5
t=单元(i,“C”)。数值
v=单元(i,“D”)。数值
对于j=3到25
如果t>Cells(j-1,“A”)值和t

只需使用双循环:

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
子演示()
尺寸i为长,j为长,t为日期,v为字符串
对于i=2到5
t=单元(i,“C”)。数值
v=单元(i,“D”)。数值
对于j=3到25
如果t>Cells(j-1,“A”)值和t

下面的函数是使用多个excel函数编写的 这和循环vba代码一样。下面是需要粘贴在单元格B2中的公式,然后将单元格内容拉至A列末尾。
=IF(AND)(A1下面的函数是使用多个excel函数编写的
这与循环vba代码相同。下面是需要粘贴在单元格B2中的公式,然后将单元格内容拉至A列末尾。

=IF(和(a1实际发生了什么?为什么不起作用?它在01:00时输入1.6m,这是不正确的。我只能假设这似乎不起作用,因为格式是时间。实际发生了什么?为什么不起作用?它在01:00时输入1.6m,这是不正确的。我只能假设这似乎不起作用,因为格式是时间?@Savagefool-感谢您的反馈。我发现了一个轻微的错配错误,它突出显示了一行:
t=Cells(I,“C”)。Value
确保a列和C列中的值是真实的时间,而不仅仅是Text@Savagefool-感谢您的反馈。我发现了一个轻微的错配错误,它突出显示了一行:
t=Cells(I,“C”).Value
确保A列和C列中的值是真实时间,而不是j
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