如何在VBA公式中引入变量?现有宏代码循环引用问题求助
解决VBA循环中公式动态引用对应行的问题
嘿,这个问题很常见,我帮你调整一下代码就能解决公式固定引用的问题了!先看修改后的完整代码,再给你拆解关键改动:
Sub Macro1() Dim ws As Worksheet Dim lastRow As Long Dim y As Long ' 指定目标工作表,避免依赖当前激活表导致出错 Set ws = ThisWorkbook.Sheets("Sheet1") ' 可靠获取E列最后一行有数据的行号(从底部向上找更稳定) lastRow = ws.Cells(ws.Rows.Count, 5).End(xlUp).Row ' 从第2行开始循环遍历 For y = 2 To lastRow ' 检查F列当前行是否为空,为空则立即终止循环 If ws.Cells(y, 6).Value = "" Then Exit For End If ' 动态生成公式,用循环变量y替换固定行号2 ws.Cells(y, 7).Formula = "=NETWORKDAYS(E" & y & ",F" & y & ",$S$2:$S$14)" Next y End Sub
关键改动说明:
- 动态公式生成:把原代码里硬编码的
E2、F2改成E" & y & "和F" & y & ",这样循环到第y行时,公式会自动引用当前行的E列和F列单元格,完美匹配你的需求。 - 更可靠的最后一行获取:原代码用
End(xlDown)如果遇到E列中间有空行,会提前停止计数;换成End(xlUp)从工作表底部向上查找,能准确拿到E列最后一行有数据的行号。 - 明确指定工作表:定义
ws变量指向Sheet1,避免代码因为当前激活的工作表不是Sheet1而出错,这是VBA编写的好习惯。 - 精准的循环终止逻辑:判断F列(第6列)当前行是否为空,为空就执行
Exit For终止循环,完全符合你“直到F列对应行无内容时终止”的要求。
如果后续你需要跳过F列的空行继续处理后面的数据,可以把Exit For改成GoTo NextLoop(需要在Next y前加NextLoop:标签),不过按照你当前的需求,现在的逻辑就足够啦。
内容的提问来源于stack exchange,提问作者Mavje
相关产品推荐
相关产品推荐

