VBA循环遍历两个excel列中的值

VBA循环遍历两个excel列中的值,vba,excel,Vba,Excel,我正在尝试遍历两个excel列,并确定第一列中的值是否存在于第二列中。我对VBA编程相当陌生,有一段时间没有编程了 我的代码,当我通过F8运行它时,如果它找到一个值,它将写入“匹配”,但它将继续循环,并最终将其重写为“不匹配”。你能告诉我怎么修理这个吗 多谢各位 只需在匹配后添加退出即可 如下图所示: If act2 = act1 Then dbsheet2.Cells(y, 3).Value = "Match" Exit For Else 试试这个: 修改If-Else,如

我正在尝试遍历两个excel列,并确定第一列中的值是否存在于第二列中。我对VBA编程相当陌生,有一段时间没有编程了

我的代码,当我通过F8运行它时,如果它找到一个值,它将写入“匹配”,但它将继续循环,并最终将其重写为“不匹配”。你能告诉我怎么修理这个吗

多谢各位


只需在匹配后添加退出即可

如下图所示:

If act2 = act1 Then
    dbsheet2.Cells(y, 3).Value = "Match"
    Exit For
Else
试试这个: 修改If-Else,如下所示

If Not dbsheet2.Cells(y, 3).Value = "Match" Then 
'Only compare if previoulsy not done or resulted in "No match"
    If act2 = act1 Then
        dbsheet2.Cells(y, 3).Value = "Match"

    Else
        dbsheet2.Cells(y, 3).Value = "No match"
    End If
End If

很好,你想出了一些代码。有很多更简单的方法,如果你愿意,你可以使用

方法1:

如果数据位于A列和B列,请在C列中输入以下公式并向下拖动

=IF(IFERROR(MATCH(A1,B:B,0),FALSE),"Match","No Match")

此公式将A列中的值与B列中的值匹配,并根据真/假进行打印

方法2:

在VBA中使用
Match
公式,而不是运行两个不同的循环,如果行数更多,这可能会占用更多的时间

下面的代码也提供了类似的输出

Sub match()
Dim i As Long
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    If IsError(Application.match(Cells(i, 1), Range("B:B"), 0)) Then
        Cells(i, 3) = "No Match"
    Else
        Cells(i, 3) = "Match"
    End If
Next i
End Sub

您是否打算在两张不同的表格中比较A列?为什么不在C列中使用此选项<代码>如果(ISNUMBER(MATCH(B2,$A$2:$A$16,0)),“MATCH”,“No MATCH”)是的,我在比较两个不同表中的列您的代码只是比较同一行中的值,而不是如果左列中的值出现在右列中的任何位置。。。。无论如何,这将非常有用:)@Mr.Riply匹配公式将一个单元格中的值与另一列中的所有值进行比较。也许你可以试一试
Sub match()
Dim i As Long
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    If IsError(Application.match(Cells(i, 1), Range("B:B"), 0)) Then
        Cells(i, 3) = "No Match"
    Else
        Cells(i, 3) = "Match"
    End If
Next i
End Sub