任何人都可以指向一个函数或代码,可以将一系列单元格与另一个工作表中的一系列单元格进行比较并返回一个值。列表具有相同的格式:
示例:
将Sheet1 A1 B1 C1 D1
与Sheet 2 A1 B1 C1 D1
进行比较并返回Sheet 2 E1
值
在我看来,它就像一个多列VLOOKUP
。
答案 0 :(得分:0)
如果你可以将工作代码移到E2,那么这个改编自siddharth链接的链接将起作用:
Dim a As Application
Set a = Application
If Join(a.Transpose(a.Transpose(Sheets(1).Rows(1).Value)), chr(0)) = _
Join(a.Transpose(a.Transpose(Sheets(2).Rows(1).Value)), chr(0)) Then
MsgBox (Sheets(2).Cells(2, "E"))
End If
根据需要更改行,而不是msgbox,将其保存为变量或您想要的。
以下内容也适用:
Dim a As Application
Set a = Application
Dim rngA As Range
Dim rngB As Range
Set rngA = Range("A1", "D1")
Set rngB = Range("A2", "D2")
If Join(a.Transpose(a.Transpose(rngA.Value)), chr(0)) = _
Join(a.Transpose(a.Transpose(rngB.Value)), chr(0)) Then
MsgBox (Sheets(2).Cells(2, "E"))
End If
如果要比较的范围每个只有1行。如果任一范围跨越多行,它将无法工作。
Sub getValuesOnRow()
Dim sourceRange As Range
Dim targetRange As Range
Set sourceRange = ActiveSheet.Range(Cells(1, 1), Cells(5, 1))
Set targetRange = ActiveSheet.Cells(7, 1)
sourceRange.Copy
targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub
Sub Compare()
Dim a As Application
Set a = Application
Dim rngA As Range
Dim rngB As Range
Set rngA = Sheets(1).Range("A1", "A6")
Set rngB = Sheets(2).Range("A1", "A6")
If Join(a.Transpose(a.Transpose(Sheets(1).Rows(7).Value)), chr(0)) = _
Join(a.Transpose(a.Transpose(Sheets(2).Rows(7).Value)), chr(0)) Then
Sheets(1).Cells(6, "A").Value = Sheets(2).Cells(6, "A")
End If
End Sub
这样有两种方法。第一个,取一个特定列,在示例中,第1列,前5个单元格,并将其放在1行。在示例中,第7行。然后转置方法,获取行并进行比较。所以第一种方法可用于获取一行上的特定列,第二种方法可用于比较2行,如果比较为真则返回特定单元格。