【问题标题】:How to highlight nonmatching values based on certain column values in VBA如何根据 VBA 中的某些列值突出显示不匹配的值
【发布时间】:2015-10-11 08:17:05
【问题描述】:

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

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

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

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

【问题讨论】:

  • 什么版本的 Excel?您需要 2010 或更高版本才能在 CF 规则中引用另一个工作表上的值(或使用命名范围的解决方法)。样本数据连同预期结果将大大有助于澄清问题。

标签: excel conditional-formatting


【解决方案1】:

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

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

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

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

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

所以我们通过使用索引函数在 B 列中找到值,其中 A 列中有匹配项,如下所示:

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

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

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

现在我们只需要用“”替换错误(如果 Match 返回不匹配)。

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

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

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多