搜索多个值。如果找到 - 执行操作。如果不是 - 进入下一个值

时间:2015-09-03 19:42:42

标签: excel vba excel-vba

Sub finddataalfa1()

Dim athletename As String
Dim finalrow_A As Integer
Dim finalrow_D As Integer
Dim i As Integer
Dim j As Integer

finalrow_A = Sheets("db1").Cells(Rows.Count, 1).End(xlUp).Row
finalrow_D = Sheets("db1").Cells(Rows.Count, 4).End(xlUp).Row

For i = 1 To finalrow_D
    athletename = Sheets("db1").Cells(i, 4).Value

    For j = 1 To finalrow_A
        If Cells(j, 1) = athletename Then 'if match between lets say D1 and A1
            Cells(j, 5) = Cells(j, 2).Value 'copy B1 value to E1 cell
        End If
    Next j
Next i

End Sub

此代码工作正常。它取自D1的值 - 在列A中找到它。如果找到,请说A10单元格,脚本取值B10并将其复制到E10单元格。但是有一个错误:

 A            B    C        D         E
AB0023999   3999        AB0023999   3999
AB0024000   4000        AB0024000   4000
AB0024001   4001        AB0024001   4001
AB0024002   4002        5000000 
AB0024003   4003        AB0024003   4003
AB0024004   4000        AB0024004   4000
AB0024005   4005        AB0024005   4005
AB0024006   3999        AB0024006   3999
AB0023999   3999        56666       3999
AB0024000   4000        56666       4000
AB0024001   4001        56667       4001
AB0024002   4002        56668   
AB0024003   4003        56669       4003
AB0024004   4000        56670       4000
AB0024005   4005        56671       4005
AB0024006   3999        56672       3999

如您所见D1 = A1,所需B1并复制到E1 转到D2 ... 除非它达到值56666 为什么它与A列匹配......我不明白。 3999的值来自哪里.. 非常感谢您的帮助! 提前谢谢!

1 个答案:

答案 0 :(得分:1)

你可能忘记了宏在找到第一个匹配时没有停止。让我们把你的第一个数字放在D列 - AB0023999。它开始循环通过A列,立即在第一行找到匹配项。因此它将B复制到E,但在A列中继续,直到它在第9行再次找到AB0023999,因此它再次将B复制到E. 如果只想在A和E列中的数字等于同一行时从B复制,那么您可以简单地使用公式

=IF(D2=A2;B2;"")