Excel VBA宏满足双条件执行对应动作的代码调试求助
VBA宏修改解决方案
修改说明
- 保留原有匹配A36值的基础条件,新增第二个判定条件,通过
And运算符关联实现双条件同时满足才触发的逻辑,可按需修改第二个条件的具体判定规则 - 新增列判定逻辑:获取当前遍历单元格所在列的第3行值,和A34的值匹配时也触发对应操作,通过
Or运算符关联两组触发规则 - 移除原有代码中无意义的
For r = 5 To 20冗余循环,该循环未用到变量r,重复赋值操作完全无效 - 补充
bEmpty变量的赋值提示,原代码未对该变量赋值,对应分支永远不会执行
修改后完整代码
Sub Test() Dim ws As Worksheet, r As Long Dim cell As Range, c As Range, bEmpty As Boolean Set ws = Worksheets("January") ' 这里可以给bEmpty变量赋值,根据实际需求修改判定逻辑 ' 示例:bEmpty = ws.Range("A1").Value = "" For Each c In ws.Range("B5:AF20").Cells ' 明确指定工作表,避免默认引用活动表出错 ' 触发条件:(双条件同时满足) OR (当前列第3行等于A34的值) If (c.Value2 = ws.Range("A36").Value2 And 此处替换为实际的第二个判定条件) _ Or (ws.Cells(3, c.Column).Value2 = ws.Range("A34").Value2) Then ' 对应执行动作 c.Offset(0, -2) = "R" If bEmpty Then c.Offset(40) = "No" End If Next MsgBox "Done" End Sub
自定义调整提示
- 将代码中
此处替换为实际的第二个判定条件修改为你需要的判定规则即可实现双条件同时生效的逻辑,例如要判断c单元格不为空,可写成c.Value <> "" - 如果列第三行的匹配需要和双条件同时生效而非二选一,把
Or改成And即可 - 如果需求中提到的“每一列的第三行”是指遍历范围B5:AF20的第三行(对应工作表行号7),把
ws.Cells(3, c.Column)改成ws.Cells(7, c.Column)即可
内容的提问来源于stack exchange,提问作者user9528422
相关产品推荐
相关产品推荐

