Excel VBA宏无法循环遍历C至AF列执行指定操作求助
修正后的可支持C列到AF列循环的VBA代码
Sub MultiColumnProcess() Dim ws As Worksheet Dim col As Integer ' 列号变量 Dim cell As Range Dim blankCount As Long ' 统计区域空单元格数量 Set ws = Worksheets("January") ' 列循环:C列对应列号3,AF列对应列号32 For col = 3 To 32 blankCount = 0 ' 先判断当前列第3行是否符合判定条件,不符合直接跳过该列 If ws.Cells(3, col).Value = ws.Range("A34").Value Or ws.Cells(3, col).Value = ws.Range("A35").Value Then ' 遍历当前列5行到20行的区域 For Each cell In ws.Range(ws.Cells(5, col), ws.Cells(20, col)) If cell.Value = 0 Then cell.Value = "R" ElseIf IsEmpty(cell) Then blankCount = blankCount + 1 End If Next cell ' 判断区域是否所有单元格均为空,是则在当前列34行写No If blankCount = 16 Then ' 5到20行共16个单元格 ws.Cells(34, col).Value = "No" Else ' 避免旧值残留,不需要写No的情况清空 ws.Cells(34, col).Value = "" End If End If Next col End Sub
代码调整说明
- 新增列循环逻辑:通过列号变量
col遍历C列(列号3)到AF列(列号32),所有列相关的单元格引用都用动态列号生成,无需硬编码每列的列标 - 修复原有逻辑错误:原代码只要遇到一个不符合替换条件的单元格就会直接给对应列34行写No,不符合「区域所有单元格均为空才写No」的需求,新增空单元格计数逻辑,只有空单元格数量等于区域总单元格数(16个)时才写入No
- 优化执行效率:将列第3行的判定条件提前到列循环开头,不满足条件的列直接跳过单元格遍历,减少不必要的运算
内容的提问来源于stack exchange,提问作者user9528422
相关产品推荐
相关产品推荐

