VBA实现物料匹配:BOM表与物料表数据自动匹配
{"title":"BOM表第二列为物料名称,第三列为物料规格,第一列为物料编码,仅有表头,其余空白;\nBOM表第三列物料规格字符存在空格、大小写混用、星号乘号混用等不规范现象,请注意字符处理;\n物料表第一列为物料编码 ,第二列为物料名称,第三列为物料规格;\n物料表内存在多行相同物料编码对应不同物料规格的行数据,在代码处理过程中匹配待任何一种对应规格都算匹配成功;\n如果BOM表内物料名称&物料规格与物料表内物料名称&物料规格完全一致则将匹配到的物料代码用黑色字体写入BOM表第一列对应的行;\n剩余不能完全匹配的,仅匹配物料规格是否一致,将匹配到的物料代码用红色字体写入BOM表第一列对应的行;\n请用VBA写一个物料匹配的程序内容:下面是一个使用VBA进行物料匹配的程序示例:\n\nvba\nSub MatchMaterials()\n Dim materialSheet As Worksheet\n Dim bomSheet As Worksheet\n Dim materialData As Range\n Dim bomData As Range\n Dim materialCodeColumn As Range\n Dim materialNameColumn As Range\n Dim materialSpecColumn As Range\n Dim bomCodeColumn As Range\n Dim bomNameColumn As Range\n Dim bomSpecColumn As Range\n Dim bomCodeCell As Range\n Dim materialCodeCell As Range\n Dim materialMatch As Boolean\n \n ' 设置物料表和BOM表的工作表\n Set materialSheet = ThisWorkbook.Sheets("物料表")\n Set bomSheet = ThisWorkbook.Sheets("BOM表")\n \n ' 获取物料表和BOM表的数据范围\n Set materialData = materialSheet.UsedRange\n Set bomData = bomSheet.UsedRange\n \n ' 获取物料表和BOM表的列范围\n Set materialCodeColumn = materialData.Columns(1)\n Set materialNameColumn = materialData.Columns(2)\n Set materialSpecColumn = materialData.Columns(3)\n Set bomCodeColumn = bomData.Columns(1)\n Set bomNameColumn = bomData.Columns(2)\n Set bomSpecColumn = bomData.Columns(3)\n \n ' 循环遍历BOM表每一行\n For Each bomCodeCell In bomCodeColumn.Cells\n ' 跳过表头行\n If bomCodeCell.Row > 1 Then\n ' 初始化匹配标志为False\n materialMatch = False\n \n ' 循环遍历物料表每一行\n For Each materialCodeCell In materialCodeColumn.Cells\n ' 跳过表头行\n If materialCodeCell.Row > 1 Then\n ' 判断物料名称和规格是否完全匹配\n If bomNameColumn.Cells(bomCodeCell.Row).Value = materialNameColumn.Cells(materialCodeCell.Row).Value And _\n bomSpecColumn.Cells(bomCodeCell.Row).Value = materialSpecColumn.Cells(materialCodeCell.Row).Value Then\n ' 完全匹配,将物料编码写入BOM表对应行的第一列,并设置字体颜色为黑色\n bomCodeCell.Offset(0, -2).Value = materialCodeCell.Value\n bomCodeCell.Offset(0, -2).Font.Color = RGB(0, 0, 0)\n ' 设置匹配标志为True\n materialMatch = True\n Exit For\n End If\n End If\n Next materialCodeCell\n \n ' 如果未完全匹配,则仅匹配规格是否一致\n If Not materialMatch Then\n For Each materialCodeCell In materialCodeColumn.Cells\n ' 跳过表头行\n If materialCodeCell.Row > 1 Then\n ' 判断物料规格是否一致\n If bomSpecColumn.Cells(bomCodeCell.Row).Value = materialSpecColumn.Cells(materialCodeCell.Row).Value Then\n ' 规格匹配,将物料编码写入BOM表对应行的第一列,并设置字体颜色为红色\n bomCodeCell.Offset(0, -2).Value = materialCodeCell.Value\n bomCodeCell.Offset(0, -2).Font.Color = RGB(255, 0, 0)\n Exit For\n End If\n End If\n Next materialCodeCell\n End If\n End If\n Next bomCodeCell\nEnd Sub\n\n\n在上述代码中,需要将"物料表"和"BOM表"替换为实际的物料表和BOM表的工作表名称。然后运行MatchMaterials这个宏即可进行物料匹配。匹配成功的物料编码将会以黑色字体显示,匹配规格的物料编码将会以红色字体显示。
原文地址: https://www.cveoy.top/t/topic/pWia 著作权归作者所有。请勿转载和采集!