2017-06-12 53 views
0

我設法遍歷兩列來查找一列中的值是否出現在另一列中。VBA excel,在列中找到對應的值

現在下一步是確定兩列中的值是否在值的右側的單元格中包含相同的值。

所需結果和當前結果的圖片應解釋我想實現的目標。

P.S.不要被代碼弄糊塗,因爲我的工作簿中的列位於兩張不同的工作表上。

enter image description here

我曾嘗試通過循環列兩次,一旦我得到一個匹配的確認,但在這一點上,我只是失去了....對不起

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 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" 

        If dbsheet2.Cells(y, 3).Value = "Match" Then 
         For i = 2 To lr1 
          If dbsheet2.Cells(y, 1).Value = dbsheet2.Cells(i, 1).Value Then 
           dbsheet2.Cells(y, 4).Value = "Match" 
          Else 
           dbsheet2.Cells(y, 4).Value = "No match" 
          End If 
         Next i 
        End If 

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

    Next x 


End Sub 
+0

爲什麼不使用'application.worksheetfunction.match(col1value,col2,0)'和'和'在你的邏輯,所以'如果MATCH1和MATCH2 then' –

回答

2

由於Nathan_Sav指出,你可以用比賽公式解決你的問題。

MATCH formula讓你工作完全沒有vba。

式匹配col1和COL2:

=IFERROR(IF(MATCH(sheet1!A1;sheet2!$A$1:$A$10;0)>=0;"Match");"No match") 

匹配公式返回其中發現匹配的索引。否則會出錯。要獲得「匹配」和「不匹配」這兩個詞,我們需要IFIFERROR公式。

式兩種COL1 & VAL1的匹配和COL2 & VAL 2

{=IFERROR(IF(MATCH(sheet1!A1&sheet1!B1;sheet2!$A$1:$A$10&sheet2!$B$1:$B$10;0)>=0;"Match");"No match")} 

Sheet 2中的兩列組合使得使用必要的陣列式的。爲了使其工作,請按Ctrl + Shift + Enter。

我希望這有助於