簡體   English   中英

VBA循環遍歷兩個excel列中的值

[英]VBA looping through values in two excel columns

我試圖循環遍歷兩個excel列,並確定第一列中的值是否存在於第二列中。 我對VBA中的編程很新,並且暫時沒有編程。

我的代碼,當我通過F8運行它時,如果它找到一個值,它將寫入“匹配”但它將繼續循環並最終將其重寫為“不匹配”。 你能告訴我如何解決這個問題。

謝謝

在此輸入圖像描述

Sub loopDb()

    Set dbsheet1 = ThisWorkbook.Sheets("Sheet1")
    Set dbsheet2 = ThisWorkbook.Sheets("Sheet2")

    lr1 = dbsheet1.Cells(Rows.Count, 1).End(xlUp).Row
    lr2 = dbsheet2.Cells(Rows.Count, 1).End(xlUp).Row

    For x = 2 To lr1
        act1 = dbsheet1.Cells(x, 1)

        For y = 2 To lr2
            act2 = dbsheet2.Cells(y, 1)

            If act2 = act1 Then
                dbsheet2.Cells(y, 3).Value = "Match"

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

    Next x


End Sub

只需在匹配后添加Exit For

如下所示:

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 and BA and B列中,請在Column C輸入以下公式並向下拖動,

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

在此輸入圖像描述

此公式匹配A列到B列的值,並根據true / false打印。

方法2:

在VBA中使用Match公式而不是運行2個不同的循環,如果有更多行,則可能會消耗更多時間。

下面的代碼也為您提供了類似的輸出。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM