Excel VBA在其他工作表中查找值并复制它们

时间:2016-09-09 09:13:31

标签: excel vba excel-vba copy formula

我有两张excel表:" Sheet1"和" Sheet2"。

Sheet1包含3列,其中包含N行。 例如:

x     y     result

A     b
B     m
L     a
A     b
B     b

Sheet2也包含3列,但结果作为每个x和y组合的解释。

示例:

x     y      result

A     a        1
A     b        2
A     c        3
B     a        4

请注意A!= a,结果并不总是数值。

所以基本上我需要从Sheet1的值中搜索Sheet2的给定组合,并将结果从Sheet2复制到Sheet1。

你能举个例子说明VBA代码如何实现这个目的吗? 使用Excel公式可能甚至可能吗?可能是INDEX和MATCH?无论如何,我无法自己解决这个问题。

由于

2 个答案:

答案 0 :(得分:0)

首先添加另一个包含公式的列以创建唯一键:

Sheet1:
   A       B       C       D
1  x       y       result  key 
2  A       b               =A2&B2
3  B       m               =A3&B3
4  L       a               =A4&B4
etc...

Sheet2:
   A       B       C       D     
1  x       y       result  key
2  A       a       1       =A2&B2
3  A       b       2       =A3&B3
4  A       c       3       =A4&B4
etc...

然后试试这个:

Sub FindResult()

Dim XY As String
Dim S1 As Object, S2 As Object
Dim ResultCell As Range, ResultValue As String

    Set S1 = Worksheets("Sheet1")
    Set S2 = Worksheets("Sheet2")

    Calculate
    For Rr = 2 To 6
        XY = S1.Cells(Rr, 4).Value
        Set ResultCell = S2.Range("D:D").Find( _
                                              What:=XY, _
                                              After:=S2.Range("D1"), _
                                              LookIn:=xlValues, _
                                              LookAt:=xlWhole, _
                                              SearchOrder:=xlByRows, _
                                              SearchDirection:=xlNext, _
                                              MatchCase:=True, _
                                              SearchFormat:=False _
                                             )
        If ResultCell Is Nothing Then
            ResultValue = "Not found"
        Else
            ResultValue = ResultCell.Offset(0, -1).Value
        End If
        S1.Cells(Rr, 3) = ResultValue
    Next Rr

End Sub

答案 1 :(得分:0)

您可以使用公式本身来完成此操作。在sheet1中,请将以下公式粘贴在C2单元格中。

=IF(SUMPRODUCT((--EXACT(Sheet2!A:A,A2))*(--EXACT(Sheet2!B:B,B2))*(--(Sheet2!A:A<>""))*(--(Sheet2!B:B<>"")),ROW(Sheet2!A:A))=0,"",INDEX(Sheet2!C:C,SUMPRODUCT((--EXACT(Sheet2!A:A,A2))*(--EXACT(Sheet2!B:B,B2))*(--(Sheet2!A:A<>""))*(--(Sheet2!B:B<>"")),ROW(Sheet2!A:A))))

并将其复制到其他单元格。它会起作用。

请查看以下图片:

Sheet1

Sheet2