[英]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 B
列A 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.