2017-06-12 5 views
0

2つの列をループして、ある列の値が他の列に存在するかどうかを調べました。VBAがExcelで対応する値を見つける

次に、両方の列に存在する値に、値の右側のセルに同じ値が含まれているかどうかを確認します。

希望の結果の写真と現在の結果は、私が達成したいことを説明するはずです。

P.S.私のワークブックの列は2つの異なるシート上にあるので、コードで混乱しないでください。

enter image description here

私は試合の確認を得れば、列を通じて二回ループし試してみましたが、Nathan_Savが指摘したように、この時点で、イムはちょうど....

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) 'と' AND'を使用していないのに役立ちます願っています –

答えて

2

申し訳ありませんが失わ一致式で問題を解決できます。

このMATCH formulaは、vbaなしで完全に作業できます。 COL1とCOL2一致させるための

式:

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

一致式は、一致が見つかったインデックスを返します。そうでなければエラー。 「一致」と「不一致」の単語を取得するには、IFIFERRORの式が必要です。シート2の2つの列を組み合わせるCOL1 & val1とCOL2 &双方のマッチングのため

式ヴァル2

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

は配列数式の使用が必要となります。それを機能させるには、Ctrl + Shift + Enterを押します。

私はそう `場合MATCH1とMATCH2 then`、これは

関連する問題