search多个值。 如果find – 执行操作。 如果没有 – 获得下一个值

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列中find它。 如果find了,让我们说A10单元格,脚本将B10值复制到E10单元格中。 但是有一个错误:

  ABCDE 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为什么它匹配一列…我不明白。 价值3999从哪里得到..将感谢您的帮助! 提前致谢!

您可能会忘记macros查找第一个匹配时不停止。 让我们把你的第一个数字在D列 – AB0023999。 它开始通过A列循环,立即在第一行find一个匹配。 因此,它将B复制到E,但是继续在A列中,直到它再次在第9行中findAB0023999,因此它再次将B复制到E. 如果只想在A和E列中的数字在同一行中相等的情况下从B复制,则可以简单地使用公式

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