0

在 Excel 的工作表中添加新行时,我希望确保如果 D 列和 E 列同时存在于另一个现有行的 D 列和 E 列中,则该现有行的 F 列将复制到新行的 F 列中。

  A    B    C    D    E    F
  A    B    C    D    E    F
  A    B    C    D    E    F
 NEW  NEW  NEW  NEW  NEW  NEW

这可以使用 IF 函数完成还是更容易在 VBA 中生成?

4

2 回答 2

0

您可以使用公式创建可以找到适当值的辅助列。

该公式必须定义为数组公式,因为我们需要从第一次检查的匹配项中返回一个数组,这样我们就可以为第二次测试准备一个数组。

首先,我们从第一个测试中构建一个数组,然后只给出第二列中的值,它们对应于第一列中的匹配项:IF($E$1:$E$10=E1,$D$1:$D$10)

然后从那个数组中,我们寻找我们的第二个值,并得到位置:MATCH(D1,TheArray,0)

然后根据这些值,我们在 F 列中查找匹配值:INDEX($F$1:$F$10,ThePosition)

把这一切都放在一个公式中给出

=INDEX($F$1:$F$10,MATCH(D1,IF($E$1:$E$10=E1,$D$1:$D$10),0))

暂时不要按 Enter - 记住我们必须让 excel 知道它是一个数组公式?要做到这一点,不要只按回车键,而是按CTRL+ SHIFT+ ENTER- 如果你做对了,你应该得到{}以下公式的奖励:

{=INDEX($F$1:$F$10,MATCH(D1,IF($E$1:$E$10=E1,$D$1:$D$10),0))}

然后,您可以隐藏 F 列,或将辅助列中的值复制到数据中的 F 列。

于 2013-11-13T17:17:05.813 回答
0

试试这个小宏:

Sub dural()
    Dim N As Long
    N = Cells(Rows.Count, "D").End(xlUp).Row
    Dim i As Long
    d = Cells(N, "D").Value
    e = Cells(N, "E").Value

    For i = N - 1 To 1 Step -1
        dt = Cells(i, "D").Value
        et = Cells(i, "E").Value
        If d = dt And e = et Then
            MsgBox "match found"
            Cells(N, "F").Value = Cells(i, "F").Value
        Exit Sub
        End If
    Next i
    MsgBox "no match found"
End Sub

因此,首先在新行中同时填写单元格ED,然后运行宏。

于 2013-11-13T13:36:24.417 回答