【问题标题】:Excel VBA look for values in other sheet and copy themExcel VBA 在其他工作表中查找值并复制它们
【发布时间】:2016-09-09 09:13:30
【问题描述】:

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

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

你能给我一个VBA代码的例子吗? 可能它甚至可以使用 Excel 公式?可能是索引和匹配?反正我自己也想不通。

谢谢

【问题讨论】:

  • 我的问题清楚了吗?或者我需要添加更多细节?

标签: vba excel copy formula


【解决方案1】:

您可以使用公式本身来做到这一点。在您的 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))))

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

请查看以下图片:

【讨论】:

  • 是的,对此进行了测试。您的工作表名称是否正确?值与您在问题中描述的列在同一列中?
  • 它只是说公式不正确并突出显示A,A2部分
  • 我又检查了一遍,这个命令确实可以正常工作。检查添加的图像以供您参考。尝试在不遗漏上述公式中的任何字符的情况下创建类似的内容。那么,您能否确保您首先在您的 Excel 中创建了 Sheet1 和 Sheet2,然后确保您复制完整的公式并粘贴它而不会丢失上述帖子中的任何字符?这个公式必须粘贴在 Sheet1 和单元格 C2 中。如果您仍然遇到任何问题,请告诉我您使用的是哪个版本的 Excel。
  • 现在可以使用了!问题是我有一个分号作为公式分隔符,例如 - 我的公式应该看起来像 =EXACT(value1;value2),所以我将“,”替换为“;”现在可以了!谢谢!
  • 能否请您解释一下公式,以便我稍后针对类似问题进行调整?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2016-04-16
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多