首页 文章

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

提问于
浏览
-1

我有两张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,结果并不总是数值 .

So basically I need to search Sheet2 for a given combination from values of Sheet1 and copy the result from Sheet2 to Sheet1.

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

谢谢

2 回答

  • 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

  • 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
    

相关问题