基于双条件修改Excel单元格值的VBA代码问题
修正后的VBA代码及问题说明
原代码存在的问题
- 未添加G列值为"Store 1"的判断条件,导致只要E列编号符合就修改G列,不符合需求中“仅当G列为Store 1时修改”的要求
- 产品编号列表与需求指定的LIST不匹配,存在多余编号(如32598、32595等),同时缺失需求中的18391、33632、33633、33635等编号
- 条件判断中重复出现多次相同编号,代码冗余且易出错
修正后的代码
Sub ChangeStore() Dim lr As Long Dim rng As Range Dim targetIDs As Variant ' 需求指定的产品编号列表 targetIDs = Array(18703, 18709, 17669, 17668, 18708, 32945, 27042, 27041, _ 18704, 32941, 32944, 32942, 18702, 18705, 18462, 18461, _ 18391, 27039, 33632, 33633, 33635, 27045) lr = Cells(Rows.Count, 1).End(xlUp).Row For Each rng In Range("E3:E" & lr) ' 同时满足两个条件:E列值在指定列表中,且G列为"Store 1" If IsNumeric(rng.Value) And Not IsError(Application.Match(rng.Value, targetIDs, 0)) Then If rng.Offset(, 2).Value = "Store 1" Then rng.Offset(, 2).Value = "Store 7" End If End If Next rng End Sub
代码修改说明
- 用数组
targetIDs存储需求指定的产品编号,替代冗长的Or判断,更易维护和修改 - 增加
IsNumeric判断,避免E列出现文本值时导致错误 - 使用
Application.Match快速判断E列值是否在指定编号列表中,代码更简洁高效 - 新增G列值为"Store 1"的判断,严格符合需求逻辑
内容的提问来源于stack exchange,提问作者Miguel Quintana
相关产品推荐
相关产品推荐

