我在 Sheet1 的 A 列中存储了超过 13000 个唯一的条形码扫描结果。在某些时候,可能会出现遵循某种模式的类似结果(在 25 种不同的模式中)。该模式可以确定部件名称。我想在 Sheet2 上的某个位置创建一个查找表,可以在其中存储所有可能的模式和相应的零件名称。设置查找表后,我需要在 Sheet1 的 B 列中使用一个公式,向下拖动以查找 A 列中的每个条形码扫描并与模式匹配,并从查找表中返回零件名称。
下图说明了我想象的公式应该如何工作。 插图
为了在另一个进程上进行确认,我已经在 VBA 中创建了一些私有函数,例如:
Function PartName4Scan(s As String) As Boolean
PartName4Scan= s Like "225299460502#[A-Z]##[A-Z]###"
End Function
在另一个过程中,当它们单独使用时,它们可以完美地工作,因为某种类型意味着始终位于特定的单元格中。
=IF(PartName4Scan(E34)=TRUE,"O","X")
。
问题是这一次,我尝试将它们嵌入到嵌套的 IF 公式中,因为 A 列中的值是随机顺序的,如下所示:
=IF(PartName4Scan(E34)=TRUE,"PartName4",IF(PartName5Scan(E34)=TRUE,"PartName5","X")
等等...
当然,在将它们嵌套 3-4 次之后,我开始遇到性能问题,所以我无法将 25 个模式嵌套在一起。如果我可以查找模式并将其与零件名称进行匹配,那就容易多了。
你非常接近函数的想法。您可以创建一个用户定义的函数来比较所有模式并返回实际的零件名称。
因此,在工作簿单元格中,您可以输入
=PartNameScan(A2)
,它将返回例如“第 1 部分”
要实现此目的 - 在工作簿中创建一个代码模块并创建如下所示的函数:
Function PartNameScan(s As String) As String
If s Like "8298716602###" Then
PartNameScan = "Part 1"
Exit Function
End If
If s Like "225299460502#[A-Z]##[A-Z]###" Then
PartNameScan = "Part 4"
Exit Function
End If
'etc - add more patterns here
End Function