Vishwajeet在列中具有一系列零件号。这些部件号必须遵循特定的模式(2个数字,5个字母,4个数字,1个字母,1个数字,1个字母和1个数字)。他想知道是否有一种方法可以轻松识别列中哪些单元格与此模式有所不同。

您可以通过多种方法来完成此任务,具体取决于数据的真实性质。例如,您可以在帮助程序列中使用以下公式:

=AND(LEN(A1)=15,ISNUMBER(--LEFT(A1,2)),ISTEXT(MID(A1,3,5)), ISNUMBER(--MID(A1,8,4)),ISTEXT(MID(A1,12,1)),ISNUMBER(-- MID(A1,13,1)),ISTEXT(MID(A1,14,1)),ISNUMBER(--RIGHT(A1,1)))

根据模式是否正确,公式(很长)将返回True或False。但是,公式存在问题。它不会捕获代替字母的符号(例如美元符号或星号),也不会捕获某些代替数字的符号(例如句点或百分号)。原因是ISTEXT函数将符号视为文本,而ISNUMBER函数将诸如“ 1.23”的内容解析为数字。

如果您想捕捉符号的这种不当使用,可以使用以下公式:

=AND(LEN(A1)=15,ISNUMBER(SUM(SEARCH(MID(A1,{1,2,8,9,10,11, 13,15},1),"0123456789"),SEARCH(MID(A1,{3,4,5,6,7,12,14},1), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))))

之所以如此,是因为它使用SEARCH功能来有效地检查零件号中的每个字符。有人认为您可能需要将公式作为数组公式输入(以Ctrl + Shift + Enter终止),但有趣的是,将其用作常规公式与数组公式时,结果没有差异。

如果您需要大量检查零件编号模式,则可能需要考虑使用宏进行检查。以下是一个简短的用户定义函数,该函数使用Like运算符查看是否遵循该模式。

Function CheckPattern(rCell As Range) As Boolean     Dim sPattern As String

sPattern = "##[A-Z][A-Z][A-Z][A-Z][A-Z]####[A-Z]#[A-Z]#"



CheckPattern = rCell.Value Like sPattern End Function

请注意sPattern变量的使用。这是Like运算符进行比较时要遵循的模式。每次出现#符号表示任何数字都可以位于此位置。每次出现[A-Z]表示位置可以是A到Z范围内的一个字母。

您可以通过在Microsoft的一个站点上访问此页面来找到有关可包含在模式中的字符的含义的更多信息:

https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/like-operator

该站点实际上是针对Visual Basic而非VBA的,但是此特定信息页面将在VBA中正常工作。

为了使用CheckPattern用户定义的函数,可以在工作表的任何单元格中放置以下内容:

=CheckPattern(A1)

假定零件号在单元格A1中,就像本技巧中介绍的所有其他公式一样。

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

本技巧(3391)适用于Microsoft Excel 2007、2010、2013和2016。