2016-04-07 8 views
1

私は1つのシートに2つのセルを持っています。 と私は別のシートを持っています - それをSEARCHシートと呼ぶことができます。 DATAの2つのセルを比較したいのですが、私はSEARCHを持っています。vba - 異なるセルの値を比較する

DATAのセルA.valueがSEARCHの列Xにあり、(SEARCHの列YのDATAのセルB.value) - 両方がSEARCHの同じ行にある場合、 SEARCH内のこの行の最初の値。

VBAで可能ですか?

おかげ

+0

http://stackoverflow.com/help/how-to-ask –

答えて

0

は、あなたがこの探しホープ..

Sub comp_value_in_diff_cells() 
On Error Resume Next 
lastrowA = Worksheets("DATA").Range("A" & Rows.Count).End(xlUp).Row 
lastrowB = Worksheets("DATA").Range("B" & Rows.Count).End(xlUp).Row 
If lastrowA = lastrowB Then 
    For i = 1 To lastrowA 
     search1 = Worksheets("DATA").Range("A" & i).Value 
     search2 = Worksheets("DATA").Range("B" & i).Value 
     With Worksheets("SEARCH") 
      For j = 1 To (.UsedRange.Cells(1, 1).Row + .UsedRange.Rows.Count) 
       a = .Range(j & ":" & j).Find(search1).Row 
       avalue = .Range(j & ":" & j).Find(search1).Column 
       b = .Range(j & ":" & j).Find(search2).Row 
       bvalue = .Range(j & ":" & j).Find(search2).Column 
       If a = b Then 
        If avalue < bvalue Then 
         If Worksheets("DATA").Range("C" & i).Value <> "" Then 
          Worksheets("DATA").Range("C" & i).Value = Worksheets("DATA").Range("C" & i).Value & "|" & search1 
         Else 
          Worksheets("DATA").Range("C" & i).Value = search1 
         End If 
        Else 
         If Worksheets("DATA").Range("C" & i).Value <> "" Then 
          Worksheets("DATA").Range("C" & i).Value = Worksheets("DATA").Range("C" & i).Value & "|" & search2 
         Else 
          Worksheets("DATA").Range("C" & i).Value = search2 
         End If 
        End If 
       End If 
      Next j 
     End With 
    Next i 
Else 
    Msgbox ("DATA Sheet A & B Mismatch") 
End If 
End Sub 
+0

は '.UsedRange.Rows.Count'はエクセル2016でトリッキーです(私はどのように覚えていないことに注意してください。 ...これはいつもそうではありません.Row = 1'という形式で始まります。私が助言できるなら、より良いアプローチは次のとおりです: 'lastRow =(sheet.UsedRange.Cells(1,1).Row + sheet.UsedRange.Rows.Count)' –

+0

@ LukaszDevは完全に合意しました。アドバイス –

+0

で編集し、複数の一致があった場合、検索シートからデータシートにすべての一致をコピーしたいのですか? –

1

はいそれが可能だ:)あなたは3の方法を持っている:

1.ループ(の場合の例)

Function FindPair(ByRef CellA As Range, ByRef CellB As Range) As Variant ' <- Change Variant for specific Type of data 

    'Set default value if not found match 
    Set FindPair = Nothing 

    Dim sheetToSearch As Worksheet 
    Dim lastRow As Long 

    'Check input 
    If CellA Is Nothing Or CellB Is Nothing Then 
     Call MsgBox("Something is wrong!", vbExclamation) 
     Exit Function 
    Exit Function 

    'For easy ro read 
    Set sheetToSearch = Sheets("Search") 

    lastRow = (sheetToSearch.UsedRange.Cells(1, 1).Row + sheetToSearch.UsedRange.Rows.Count) 'First row of UsedRange + rows count 

    'Look up 
    For r = 0 To lastRow 

     'Change column here, if you need 
     If sheetToSearch.Range("A" + r).Value = CellA.Value Then 

      If sheetToSearch.Range("B" + r).Value = CellB.Value Then 

       'Return data 
       FindPair = sheetToSearch.Range("A" + r).Value 
       Exit For 

      End If 
     End If 
    Next r 

    'You can compare *.Value = *.Value - for compare binary data 
    'or *.Text = *.Text - for compare value like as text with formatting 

End Function 


2.それがどのように動作するかのドキュメントを探してください

Application.WorksheetFunction.Find()

を探す:docum探してくださいVBA Find


3. VLOOKUP

Application.WorksheetFunction.VLookup()

それがどのように動作するかentation:Excel VLookup