You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:01:56