我需要将一张纸的基行与另一张纸的另一行进行比较。基础工作表将始终使用范围 A8、B8、C8 和 D8。Sheet 2 的行将随着行的添加或删除而动态变化,但始终使用 A、B、C 和 D 列。例如,这次它可能有 3 行,并包含 5 行用于下一次比较。但是,比较总是从工作表 2 中的第 3 行开始,直到匹配或用完行。如果基础表的 A8 与表 2 的 A3 匹配,则检查基础表的 B8 与表 2 的 B3。如果 A8 与 A3 不匹配,则移动到下一行并检查 A8 与 A4,依此类推。我正在检查基行的 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