한 시트의 기본 행과 다른 시트의 다른 행을 비교해야합니다. 기준 시트는 항상 범위 A8, B8, C8 및 D8을 사용합니다. 시트 2 행은 행이 추가되거나 삭제됨에 따라 동적으로 변경되지만 항상 A, B, C 및 D 열을 사용합니다. 예를 들어 이번에는 3 행을 포함 할 수 있으며 다음 비교를 위해 5 행을 포함 할 수 있습니다. 그러나 비교는 항상 시트 2의 행 3에서 시작하여 일치가 이루어 지거나 행이 부족할 때까지 진행됩니다. 기본 시트의 A8이 용지 2의 A3과 일치하면 기본 시트의 B8을 용지 2의 B3으로 확인합니다. A8이 A3과 일치하지 않으면 다음 행으로 이동하여 A4로 A8을 확인하는 식으로 진행합니다. 기본 행의 열 A가 시트 2의 열 A와 일치하는지 (B는 B와 일치하고 C는 C와 일치하고 D는 D와 일치하는지) 확인합니다. 기준 시트의 범위가 다른 시트의 범위와 일치하지 않으면 match = true가 될 때까지 비교할 다음 행을 확인하고 true를 반환하거나 그렇지 않으면 false를 반환합니다. 기준 시트의 열 A는 용지 2의 열 B, C 또는 D와 절대 일치하지 않습니다. 기준 시트의 B는 용지 2의 A, C 또는 D와 절대 일치하지 않습니다.별도의 워크 시트에서 행을 비교하십시오.
미리 도움을 주셔서 감사합니다. 제게 더 많은 정보가 필요하면 알려주세요.
정확합니다. 일치하는 행 번호를 반환하거나 일치하는 항목이 없으면 -1을 반환하는 함수를 찾고 있습니다. 나는 당신의 생각을 좋아해서 이렇게 생각하고 있습니다. 내가 근심에서 멀어지고 쉬운 방법이 있다면, 알려주세요. 나의 자존심은 쉽게 상처를주지 않습니다.
Public Function RangesMatchRow(RefSheet As Worksheet) As Integer
''I need to be able to return matching row number
Dim Rng, rng2, val As Range
Dim baseStr, refStr As String
Dim lastRow, i As Integer
Dim BaseSheet As Worksheet
Set BaseSheet = Sheets("Base")
'Get the range you want to compare
Set Rng = BaseSheet.Range("A8:D8")
'And concantenate it
For Each val In Rng.Cells
baseStr = baseStr & val.Value
Next val
lastRow = RefSheet.Range("A").Offset(sheetName.Rows.Count - 1, 0).End(xlUp).Row
For i = 3 To lastRow ''It will always start with row three and go until the last row for column A
rng2 = sheetName.Range("Ai:Di") ''Not sure if this is right but i represents the row number
For Each val In rng2
refStr = refStr & val.Value
Next val
If StrComp(UCase(baseStr), UCase(refStr), vbTextCompare) = 0 Then ''If they match Then
RangesMatchRow = i ''Set RangesMatchRow equal to i
Return ''And return
End If
Next
RangesMatchRow = -1 ''If no matches are found then return -1
End Function
지금까지 시도한 것을 보여주십시오. – RBarryYoung
코드가 없지만 밀도가 높은 질문은 결코 매우 흥미롭지 않습니다 ;-) –
이것은 내가 알아 낸 것입니다. 아무도 더 나은 대답을 찾지 못하면 같은 문제를 해결하기 위해 다른 사람들의 답변 섹션에 추가 할 것입니다. –