比较两个单元格范围并根据比较返回一个值

时间:2014-01-31 13:52:31

标签: excel vba excel-vba

任何人都可以指向一个函数或代码,可以将一系列单元格与另一个工作表中的一系列单元格进行比较并返回一个值。列表具有相同的格式:

示例:

Sheet1 A1 B1 C1 D1Sheet 2 A1 B1 C1 D1进行比较并返回Sheet 2 E1

在我看来,它就像一个多列VLOOKUP

1 个答案:

答案 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行。如果任一范围跨越多行,它将无法工作。

EDIT2

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行,如果比较为真则返回特定单元格。