Excel:复杂生产任务订单数据处理一键搞定!

B站影视 港台电影 2025-08-15 20:41 1

摘要:2:判断D例数据

1:先判断C列订单号是否一致

2:判断D例数据<35,数据不一致的
3:判断E列与I列数据一致的
4:把D列,E列对应的G列数据复制到J列
5:判断D例数据<35,数据是一致的,E列数据也一致
6: G列的小于550的和复制到大于等于41对应的j列,否则按第3第4执行

D列数据一致性检查:检查上一步识别出的行中,D列数据是否完全一致。

分支处理逻辑

如果D列数据不一致:执行E列与I列匹配,将源行的G列值复制到目标行的J列。如果D列数据一致且E列数据也一致:计算G列值的和,如果和小于550,则将此和值复制到D列整数部分大于等于41的行的J列。

关键点:在E列与I列匹配时,I列的其他行仅为D列大于35的对应行,而不是所有行。

数据遍历与验证:首先遍历C列,验证所有订单号是否一致,如果不一致则立即退出程序。

数据提取与分类:遍历所有行,提取D列整数部分小于35的行作为源行,D列整数部分大于等于35的行作为目标行。

一致性判断:检查所有源行的D列数据是否一致,以及E列数据是否一致。

分支处理

不一致分支:对于每个源行,在目标行中查找I列值等于源行E列值的行,建立匹配关系,并将源行的G列值复制到匹配目标行的J列。一致分支:计算所有源行G列值的和,如果和小于550,则查找D列整数部分大于等于41的行,将和值复制到这些行的J列。

错误处理:添加错误处理机制,确保程序在遇到异常情况时能够优雅地退出并提供错误信息。

技术要点:使用数组存储源行和目标行的索引,提高数据处理效率;使用字符串函数提取D列的整数部分;使用循环和条件判断实现复杂的匹配逻辑。

' 获取操作系统日期: 2025/08/15' 作者:Numdark' 功能:根据订单号、物料长代码等条件进行数据匹配和复制' 必要的自定义修改方法:可根据实际数据范围调整代码中的起始行和结束行Sub ProcessOrderDataDim ws As WorksheetDim lastRow As Long, i As Long, j As LongDim orderNumber As StringDim dValue As Double, dInteger As IntegerDim dValuesConsistent As BooleanDim eValuesConsistent As BooleanDim sumG As DoubleDim matchFound As BooleanDim sourceRows As Long, targetRows As LongDim sourceCount As Long, targetCount As LongDim firstDValue As StringDim firstEValue As String' 设置错误处理On Error GoTo ErrorHandler' 设置工作表对象Set ws = ActiveSheet' 获取最后一行lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row' 检查订单号一致性orderNumber = ws.Cells(2, "C").ValueFor i = 3 To lastRowIf ws.Cells(i, "C").Value orderNumber ThenMsgBox "订单号不一致,程序退出!", vbExclamationExit SubEnd IfNext i' 初始化数组ReDim sourceRows(1 To lastRow)ReDim targetRows(1 To lastRow)sourceCount = 0targetCount = 0' 识别D列整数部分小于35的行(源行)和大于等于35的行(目标行)For i = 2 To lastRow' 提取D列整数部分dValue = ws.Cells(i, "D").ValuedInteger = Int(dValue)If dInteger firstDValue ThendValuesConsistent = FalseExit ForEnd IfNext i' 如果D列数据一致,检查E列数据一致性If dValuesConsistent TheneValuesConsistent = TruefirstEValue = ws.Cells(sourceRows(1), "E").ValueFor i = 2 To sourceCountIf ws.Cells(sourceRows(i), "E").Value firstEValue TheneValuesConsistent = FalseExit ForEnd IfNext iEnd If' 根据D列和E列数据一致性进行分支处理If dValuesConsistent And eValuesConsistent Then' D列和E列数据都一致的情况' 计算G列值的和sumG = 0For i = 1 To sourceCountsumG = sumG + ws.Cells(sourceRows(i), "G").ValueNext i' 如果和小于550,则复制到D列整数部分大于等于41的行的J列If sumG = 41 Thenws.Cells(targetRows(i), "J").Value = sumGEnd IfNext iEnd IfElse' D列数据不一致的情况' 执行E列与I列匹配,并将G列值复制到J列For i = 1 To sourceCountmatchFound = False' 在目标行中查找I列值等于源行E列值的行For j = 1 To targetCountIf ws.Cells(targetRows(j), "I").Value = ws.Cells(sourceRows(i), "E").Value Then' 将源行的G列值复制到目标行的J列ws.Cells(targetRows(j), "J").Value = ws.Cells(sourceRows(i), "G").ValuematchFound = TrueExit ForEnd IfNext j' 如果没有找到匹配,可以添加提示或处理逻辑If Not matchFound Then' 可以选择在这里添加提示或处理逻辑End IfNext iEnd IfMsgBox "数据处理完成!", vbInformationExit SubErrorHandler:MsgBox "发生错误: " & Err.Description, vbCriticalEnd Sub

当需要处理包含多个订单号的数据时,可以修改代码以支持分组处理。具体实现方法:

首先对所有订单号进行分组,可以使用字典对象存储每个订单号对应的行索引对每个订单号组分别执行现有的处理逻辑添加输出选项,可以选择将结果输出到同一工作表的不同区域或不同工作表

这种迁移适用于需要批量处理多个订单数据的场景,提高处理效率。

将代码中的硬编码条件(如35、550、41等数值)改为参数化输入,使程序更加灵活。具体实现方法:

添加用户界面(如输入框或自定义表单)接收参数值或者在工作表中添加参数区域,从指定单元格读取参数值修改代码,使用变量代替硬编码值,使条件判断更加灵活

这种迁移适用于需要根据不同业务需求调整处理条件的场景,提高代码的复用性。

当需要处理的列数增加或处理逻辑更加复杂时,可以扩展代码以支持多列数据处理。具体实现方法:

重构代码,使用列索引数组或列名字典来管理多列数据添加配置区域,定义需要处理的列及其处理方式实现通用的数据处理函数,根据配置对不同的列应用不同的处理逻辑

这种迁移适用于数据结构更加复杂,需要处理多列数据的场景,提高代码的可扩展性。

来源:终南藏

相关推荐