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

How to highlight nonmatching values based on certain column values in VBA

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

基本上,我需要做的是在每个 sheet 中搜索匹配值(例如,单元格 A10 将是 "project 10",而在另一个 sheet 中可能将单元格 A6 作为 "project 10").

然后它会查看一个单独的列,并匹配那里的日期(即,单元格 A10 的日期为“11/12/15”,而单元格 A6 在另一个 sheet 的日期为“11/11/15”),如果它与第一个 sheet 上的日期不同,则突出显示该单元格。

这里棘手的是项目在每个 sheet 上的顺序不同(如上所述)。我已经尝试了几个代码建议,但还没有得到任何结果。

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

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

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

首先,它使用 MATCH 函数检查 sheet2列A。如果它确实存在,它将吐出它出现的行号。如果不存在,则会产生错误。所以它被包装在 ISERROR 中,上面写着 "if this argument returns an error, spit out TRUE"。但是,当出现 no 错误时,我们希望它为 return TRUE。因此,我们将其包装在 NOT 中,它将 TRUE 反转为 FALSE,反之亦然。

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

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

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

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

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

现在我们只需要将错误(如果 Match return 不匹配)替换为“”。

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

就是这样。如果 sheet2 columnA 中有匹配项 [使用 MATCH 函数],它会为您提供 B 列中的日期 [使用 INDEX] 函数。如果没有匹配项,它 returns "" [使用 IFERROR 函数]。然后,如果该值不等于 B1,则结果为 TRUE,这会触发您的条件格式设置。