如何根据VBA中的某些列值突出显示不匹配的值

时间:2015-07-21 18:05:32

标签: excel conditional-formatting

我如何实现宏或条件格式设置规则,根据列中的值比较两个单独的工作表?

基本上,我需要做的是在每个工作表中搜索匹配的值(例如,单元格A10将是“项目10”,而在另一个工作表上,它可能是单元格A6为“项目10” “)。

然后它会查看一个单独的列,并匹配那里的日期(即,单元格A10将具有日期“11/12/15”并且另一个表格上的单元格A6将具有日期“11/11/15”)突出显示单元格是否与第一张表单上的日期不同。

这里棘手的问题是每个工作表上的项目顺序不同(如上所述)。我尝试了几个代码建议,但还没有到达任何地方。

1 个答案:

答案 0 :(得分:0)

让我们使用条件格式解决。

您可能知道,条件格式设置的工作原理是设置一个规则来管理您应用它的单元格。如果该规则生成TRUE,则应用规则(diff颜色等)。所以这里的目标是制定一个在满足所有条件时得到TRUE的公式。我们关心的有两个条件。首先,sheet1上A列中的项目是否存在于sheet2的A列中?

=not(iserror(match($A1,sheet2!$A:$A,0)))

首先,它使用MATCH函数来检查是否存在A1(在列上具有绝对引用,因此当您将规则应用于列A和B时,它根本不会查看列B)存在于sheet2 columnA 。如果它确实存在,它将吐出它出现的行号。如果它不存在,则会产生错误。因此,它包含在ISERROR中,表示"如果此参数返回错误,则吐出TRUE"。但是,当出现 no 错误时,我们希望它返回TRUE。所以,我们将它包装在NOT中,它将TRUE反转为FALSE,反之亦然。

现在您真正关心的是,如果Sheet2中存在A1,那么sheet2上B列中的那一行是否与sheet1上的B1值相匹配?

因此我们通过使用索引函数找到列B中的值,其中A列中存在匹配,如下所示:

=Index(sheet2!$B:$B,match($A1,sheet2!$A:$A,0))

这给出了表2中B列的值。因此,检查:该值是否等于B1,sheet1中的值? [我们实际检查该值是否与B1不同,因此我们使用"<>"而不是" ="。

=Index(sheet2!$B:$B,match($A1,sheet2!$A:$A,0))<>$B1

现在我们只需要用&#34;&#34;替换错误(如果匹配不返回匹配)。

=Iferror(Index(sheet2!$B:$B,match($A1,sheet2!$A:$A,0)),"")<>$B1

就是这样。如果在sheet2 columnA [使用MATCH函数]中匹配,它将为您提供B列[使用INDEX]功能的日期。如果没有匹配,则返回&#34;&#34; [使用IFERROR功能]。然后,如果该值不等于B1,则结果为TRUE,这会触发条件格式化。