请用VBA字典、数组写一个对BOM表在物料表内进行查询匹配物料代码的程序;BOM表第一列为物料编码仅有表头其余空白经过匹配查询处理后得到的物料编码将写入此列第二列为物料名称第三列为物料规格;物料表第一列为物料编码 第二列为物料名称第三列为物料规格此表是一个供查询匹配物料编码的字典库;BOM表的第三列物料规格字符前后存在多余空格、大小写混用等不规范现象请注意字符处理;BOM表内存在重复行数据每行都要
请注意,VBA中没有内置的字典数据结构,但可以使用Collection对象来实现类似字典的功能。
以下是一个示例代码,用于对BOM表进行查询匹配物料代码的处理:
Sub MatchMaterials()
Dim bomSheet As Worksheet
Dim materialSheet As Worksheet
Dim bomRange As Range
Dim materialRange As Range
Dim bomDict As Collection
Dim bomRow As Range
Dim materialRow As Range
Dim bomCode As String
Dim bomName As String
Dim bomSpec As String
Dim materialCode As String
Dim materialName As String
Dim materialSpec As String
Dim matchType As String
' 设置BOM表和物料表的工作表
Set bomSheet = ThisWorkbook.Worksheets("BOM表")
Set materialSheet = ThisWorkbook.Worksheets("物料表")
' 设置BOM表和物料表的数据范围
Set bomRange = bomSheet.Range("A2:C" & bomSheet.Cells(Rows.Count, 1).End(xlUp).Row)
Set materialRange = materialSheet.Range("A2:C" & materialSheet.Cells(Rows.Count, 1).End(xlUp).Row)
' 创建BOM表的字典
Set bomDict = New Collection
' 将物料表数据添加到字典中
For Each materialRow In materialRange.Rows
materialCode = Trim(materialRow.Cells(1).Value)
materialName = Trim(materialRow.Cells(2).Value)
materialSpec = Trim(materialRow.Cells(3).Value)
' 如果物料编码已存在于字典中,则跳过该行
On Error Resume Next
bomDict.Add materialCode, materialCode
On Error GoTo 0
Next materialRow
' 处理BOM表数据
For Each bomRow In bomRange.Rows
bomCode = Trim(bomRow.Cells(1).Value)
bomName = Trim(bomRow.Cells(2).Value)
bomSpec = Trim(bomRow.Cells(3).Value)
' 初始化匹配类型
matchType = ""
' 完全匹配
If bomName = materialName And bomSpec = materialSpec Then
bomRow.Cells(1).Font.Color = RGB(0, 0, 0) ' 黑色字体
matchType = "完全匹配"
Else
' 仅规格匹配
For Each materialRow In materialRange.Rows
materialCode = Trim(materialRow.Cells(1).Value)
materialName = Trim(materialRow.Cells(2).Value)
materialSpec = Trim(materialRow.Cells(3).Value)
If bomSpec = materialSpec Then
bomRow.Cells(1).Font.Color = RGB(0, 176, 80) ' 绿色字体
matchType = "仅规格匹配"
Exit For
End If
Next materialRow
' 规格处理匹配
If matchType = "" Then
For Each materialRow In materialRange.Rows
materialCode = Trim(materialRow.Cells(1).Value)
materialName = Trim(materialRow.Cells(2).Value)
materialSpec = Trim(materialRow.Cells(3).Value)
' 在字符处理后比较规格
If UCase(Trim(bomSpec)) = UCase(Trim(materialSpec)) Then
bomRow.Cells(1).Font.Color = RGB(255, 0, 0) ' 红色字体
matchType = "规格处理匹配"
Exit For
End If
Next materialRow
End If
' 模糊匹配
If matchType = "" Then
For Each materialRow In materialRange.Rows
materialCode = Trim(materialRow.Cells(1).Value)
materialName = Trim(materialRow.Cells(2).Value)
materialSpec = Trim(materialRow.Cells(3).Value)
' 在字符处理后比较规格
If UCase(Trim(bomSpec)) Like "*" & UCase(Trim(materialSpec)) & "*" Then
bomRow.Cells(1).Font.Color = RGB(255, 140, 0) ' 橙色倾斜字体
bomRow.Cells(1).Font.Italic = True
matchType = "模糊匹配"
Exit For
End If
Next materialRow
End If
End If
' 在第四列显示匹配类型
bomRow.Cells(4).Value = matchType
Next bomRow
End Sub
请将以上代码复制到VBA编辑器中的模块中,并根据实际情况修改工作表名称和数据范围。然后运行MatchMaterials过程,即可对BOM表进行查询匹配物料代码的处理。匹配结果将在BOM表的第一列显示,并根据匹配类型使用不同颜色的字体进行标记。匹配类型将在BOM表的第四列显示
原文地址: https://www.cveoy.top/t/topic/ihxt 著作权归作者所有。请勿转载和采集!