Kim有一列数据用于包含位置代码。该代码由一个字母和两个数字组成,例如A03或B12。

Kim希望有条件地格式化该列,以便以某种方式突出显示输入到该列的任何不使用此模式的内容。

有很多方法可以解决此问题。每种方法都依赖于开发可在条件格式设置规则中使用的公式,以返回True或False并触发条件格式。 (本技巧将不涉及如何创建条件格式设置规则,而是着重于该规则中可以使用的各种公式。其他_ExcelTips_中介绍了如何创建条件格式设置规则。)

无论采用哪种公式,都必须测试三件事:

  • 字符串中恰好有三个字符。

  • 第一个字符是字母。

  • 第二和第三个字符是数字。

找出一个单元格中的文本是否只有三个字符是很容易的。您可以使用LEN函数来做到这一点:

=LEN(A1)=3

找出第一个字符是否为字母也很容易。实际上,有两种方法可以完成。如果第一个字符是字母,则以下任何一项将返回True:

=AND(CODE(LEFT(A1,1))>64,CODE(LEFT(A1,1))<91)

=AND(LEFT(A1,1)>="A",LEFT(A1,1)<="Z")

这些检查以确保只有大写字母位于第一个位置。如果您还希望接受小写字母,则可以使用第二种测试的变体:

=AND(UPPER(LEFT(A1,1))>="A",UPPER(LEFT(A1,1))<="Z")

如果大写和小写字母都可接受(以及几乎任何其他符号),那么您可以考虑使用以下测试:

=NOT(ISNUMBER(LEFT(A1,1)+0))

您可以通过以下两种方式应用第三个测试-第二个和第三个字符是否为数字:

=ISNUMBER(VALUE(RIGHT(A1,2)))

=ISNUMBER(--RIGHT(A1,2))

请注意,这些方法将最后两个字符一起处理。这意味着“ 1”,“ 11”和“ 111”将全部通过测试-它们以数字形式成功签出。如果您的公式仅检查最后两位数字,则可能会出现问题,但是您还将包括第一次检查(对于单元格中字符串的总长度且必须为3)这一事实,那么它不会完全没有问题。

现在,诀窍是将三个测试中每一个的选择方法合并为一个公式。可以使用AND功能完成。我只是从每个测试中选择最短的一个,并以这种方式将它们组合:

=AND(LEN(A1)=3, AND(LEFT(A1,1)>="A",LEFT(A1,1)<="Z"), ISNUMBER(--RIGHT(A1,2)))

如所写,如果所有测试均通过,则此公式将返回True,这意味着该单元格包含具有有效模式的位置代码。如果Kim将列格式设置为一种颜色(例如绿色),然后使用条件格式删除绿色,则此方法非常适合作为条件格式。这可能看起来很落后,实际上您可能只想在不符合模式的情况下应用格式。如果是这种情况,则只需将公式包含在NOT函数中即可反转返回的True / False:

=NOT(AND(LEN(A1)=3, AND(LEFT(A1,1)>="A",LEFT(A1,1)<="Z"), ISNUMBER(--RIGHT(A1,2))))

如您所知,使用这样的公式可能会有些棘手。如果愿意,可以创建UDF(用户定义的函数),以使条件格式设置规则更短一些。以下宏是一个不错的选择:

Function IsBadPattern(sCell As String) As Boolean     IsBadPattern = Not(sCell Like "[A-Z][0-9][0-9]")

End Function

要在条件格式设置规则中使用UDF,您需要做的就是使用以下公式:

=IsBadPattern(A1)

如果引用的单元格中的字符串与所需的模式不匹配,则UDF的结果将为TRUE。按照书面规定,不允许在第一个字符位置使用小写字母。如果需要允许使用小写字母,则无需更改UDF。而是,将公式更改为以下内容:

=IsBadPattern(UPPER(A1))

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9976)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。