Do ...问题直到函数VBA

时间:2015-07-31 15:28:23

标签: excel vba excel-vba

我的VBA代码存在问题。我尝试通过一个包含大量数据的整个表。我需要第一个条件的第一列。一旦这个条件完成,我会通过第一个列旁边的列,但从同一个位置开始,我停止了前一个。第二个条件完成后,我会尝试复制粘贴。但由于某些原因,我得到错误“下标超出范围”你能帮助我吗?

以下是代码:

Sub Match()

Dim i As Integer
i = 0
Dim j As Integer
Do
    i = i + 1
Loop Until Sheets("Sheet1").Range("A1").Offset(i, 0).Text = Sheets("Sheet2").Range("I5").Text
j = i
Do
    j = j + 1
Loop Until Sheets("Sheet1").Range("B1").Offset(j, 0).Value = Sheets("Sheet2").Range("I11").Value

Sheets("Sheet1").Range("C1").Offset(j, 0).Copy
Sheets("Sheet2").Range("N11").Paste

End Sub

谢谢你们

3 个答案:

答案 0 :(得分:1)

这应该做同样的事情,没有任何循环:

Sub Match()

Dim lastA As Long, lastB As Long
Dim i As Long, j As Long

With Sheets("Sheet1")
    last a = .Cells(.Rows.count, 1).End(xlUp).Row
    last b = .Cells(.Rows.count, 2).End(xlUp).Row
End With

i = WorksheetFunction.Match(Sheets("Sheet2").Range("I5").Text, Sheets("Sheet1").Range("A:A"), 0)
j = WorksheetFunction.Match(Sheets("Sheet2").Range("I11").value, Sheets("Sheet1").Range("B" & i & ":B" & lastB), 0)

Sheets("Sheet2").Range("N11").value = Sheets("Sheet1").Cells(j, 3).value

End Sub

答案 1 :(得分:0)

我没有得到与你相同的错误,但我改变了最后一行,它似乎工作。

Sub Match()

Dim i As Integer
i = 0
Dim j As Integer
Do
    i = i + 1
Loop Until Sheets("Sheet1").Range("A1").Offset(i, 0).Text = Sheets("Sheet2").Range("I5").Text
j = i
Do
    j = j + 1
Loop Until Sheets("Sheet1").Range("B1").Offset(j, 0).Value = Sheets("Sheet2").Range("I11").Value

Sheets("Sheet1").Range("C1").Offset(j, 0).Copy Destination:=Sheets("Sheet2").Range("N11")

End Sub

我确实注意到如果你没有得到一个不好的匹配,你的代码将永远运行。您可能想要为此添加解决方案。它可以像添加一样简单 Or i > 10000Loop Until

答案 2 :(得分:0)

我稍微修改了你的代码:

Sub Match()

    Dim i As Integer
    i = 0
    Dim j As Integer

    Do
        i = i + 1
    Loop Until Sheets("Sheet1").Range("A1").Offset(i, 0).Text = Sheets("Sheet2").Range("I5").Text

    j = i
    Do
        j = j + 1
    Loop Until Sheets("Sheet1").Range("B1").Offset(j, 0).Value = Sheets("Sheet2").Range("I11").Value
    Sheets("Sheet1").Range("C1").Offset(j, 0).Copy Sheets("Sheet2").Range("N11")
End Sub

它可以正常使用以下数据:

enter image description here

Sheet1。

请注意 B 匹配必须低于 A 匹配。