请注意,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表的第四列显示

请用VBA字典、数组写一个对BOM表在物料表内进行查询匹配物料代码的程序;BOM表第一列为物料编码仅有表头其余空白经过匹配查询处理后得到的物料编码将写入此列第二列为物料名称第三列为物料规格;物料表第一列为物料编码 第二列为物料名称第三列为物料规格此表是一个供查询匹配物料编码的字典库;BOM表的第三列物料规格字符前后存在多余空格、大小写混用等不规范现象请注意字符处理;BOM表内存在重复行数据每行都要

原文地址: https://www.cveoy.top/t/topic/ihxt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录