在 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 中生成?
您可以使用公式创建可以找到适当值的辅助列。
该公式必须定义为数组公式,因为我们需要从第一次检查的匹配项中返回一个数组,这样我们就可以为第二次测试准备一个数组。
首先,我们从第一个测试中构建一个数组,然后只给出第二列中的值,它们对应于第一列中的匹配项: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 列。
试试这个小宏:
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
因此,首先在新行中同时填写单元格E和D,然后运行宏。