比较Excel工作表值以更新第三个值

时间:2016-06-10 14:42:04

标签: excel vba excel-vba excel-formula

Example file所以我有两张表,每张都有部件号列表,工厂来自哪里,两列有成本。我需要做的就是扫描它们,如果表A和表B都有一行具有匹配的零件编号和它们来自的工厂,那么A的两个成本值会更新以匹配B的成本。

然后,下一步是突出显示工作表A中不在工作表B上的所有单元格,并突出显示工作表B中复制到工作表A的所有单元格。我认为最后一部分可以在单元格同时完成被复制我只是不知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

这是一种公式方法。

因为您不会更改所有值,并且我假设您要保留那些没有匹配的值,然后在表1中的数字旁边的空列中输入以下公式:

=IFERROR(INDEX(Sheet2!F$3:F$7,MATCH(1,INDEX((Sheet2!$D$3:$D$7=$A3)*(Sheet2!$B$3:$B$7=$C3),),0)),G3)

然后复制一列,然后复制到数据的末尾。

INDEX((Sheet2!$D$3:$D$7=$A3)*(Sheet2!$B$3:$B$7=$C3),)将创建一个0和1的数组,其大小与工作表2上的数据引用大小相同。在此实例中,它将创建一个包含5个对象的1维数组。

这些0和1对象的位置是相对于行的。因此,对于第一个公式,返回数组将为{0,1,0,0,0},因为只有第二行数据与工厂和部件号匹配。

然后MATCH(1,INDEX(...),0)找到该数组中第一个为1的对象并返回相对位置,在本例中为2,因为它是数组中的第二个。

INDEX(Sheet2!F$3:F$7,...)然后返回范围Sheet2!F$3:F$7中的值,其相对位置等于从MATCH()传递的2。所以Sheet2!F4。

如果没有找到MATCH,那么整个事件将抛出#N / A错误,因此我们使用IFERROR(...,G3)捕获该错误,并告诉公式返回G列中的值。

这将为您提供所有正确的值:

enter image description here

然后,您可以将值复制并粘贴回原始位置,并使用公式隐藏列:

enter image description here

Sheet2供参考:

![enter image description here

如果你想让vba完成复制的最后一部分并过去和隐藏,那么使用宏录制器,然后清理代码。