私は1つのシートに2つのセルを持っています。 と私は別のシートを持っています - それをSEARCHシートと呼ぶことができます。 DATAの2つのセルを比較したいのですが、私はSEARCHを持っています。vba - 異なるセルの値を比較する
DATAのセルA.valueがSEARCHの列Xにあり、(SEARCHの列YのDATAのセルB.value) - 両方がSEARCHの同じ行にある場合、 SEARCH内のこの行の最初の値。
VBAで可能ですか?
おかげ
私は1つのシートに2つのセルを持っています。 と私は別のシートを持っています - それをSEARCHシートと呼ぶことができます。 DATAの2つのセルを比較したいのですが、私はSEARCHを持っています。vba - 異なるセルの値を比較する
DATAのセルA.valueがSEARCHの列Xにあり、(SEARCHの列YのDATAのセルB.value) - 両方がSEARCHの同じ行にある場合、 SEARCH内のこの行の最初の値。
VBAで可能ですか?
おかげ
は、あなたがこの探しホープ..
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
は '.UsedRange.Rows.Count'はエクセル2016でトリッキーです(私はどのように覚えていないことに注意してください。 ...これはいつもそうではありません.Row = 1'という形式で始まります。私が助言できるなら、より良いアプローチは次のとおりです: 'lastRow =(sheet.UsedRange.Cells(1,1).Row + sheet.UsedRange.Rows.Count)' –
@ LukaszDevは完全に合意しました。アドバイス –
で編集し、複数の一致があった場合、検索シートからデータシートにすべての一致をコピーしたいのですか? –
はいそれが可能だ:)あなたは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
http://stackoverflow.com/help/how-to-ask –