在活动工作表中循环行列并运行GoalSeek的VBA宏优化需求
简化后的VBA宏代码(循环处理L列数据)
以下是优化后的宏代码,通过循环和变量消除冗余逻辑,自动遍历L列所有非空数据行:
Sub ProcessGoalSeekLoop() Dim ws As Worksheet Dim currentRow As Long Dim lastRow As Long ' 绑定当前活动工作表 Set ws = ActiveSheet ' 获取L列最后一个非空单元格的行号 lastRow = ws.Cells(ws.Rows.Count, "L").End(xlUp).Row ' 从第5行开始遍历L列数据(匹配你给出的示例起始行) For currentRow = 5 To lastRow ' 跳过L列空单元格,避免无效操作 If ws.Cells(currentRow, "L").Value <> "" Then ' 将当前行L列的值写入I4 ws.Range("I4").Value = ws.Cells(currentRow, "L").Value ' 执行GoalSeek:将J4目标值设为0,调整单元格为D23 ws.Range("J4").GoalSeek Goal:=0, ChangingCell:=ws.Range("D23") ' 将计算结果写入对应行的M、N列 ws.Cells(currentRow, "M").Value = ws.Range("D23").Value ws.Cells(currentRow, "N").Value = ws.Cells(currentRow, "H").Value End If Next currentRow End Sub
关键优化说明
- 用
ws变量统一管理活动工作表,减少重复代码,也便于后续修改为指定工作表 - 通过
lastRow自动获取L列数据的结束行,无需手动修改循环终止条件 - 用
currentRow作为循环变量,所有操作都基于当前行,彻底消除重复的单元格引用 - 增加空值判断,跳过L列的空白单元格,避免无意义的计算
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

