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

VBA代码优化:自动定位F列首个空白单元格并填充动态公式

修改后的VBA代码及说明

代码实现

Private Sub calc()
    Dim ws As Worksheet
    Dim lastrow As Long
    Dim firstBlankRow As Long
    Dim fillRng As Range
    
    ' 绑定目标工作表,避免依赖活动工作表
    Set ws = ThisWorkbook.Worksheets("Indiv")
    
    ' 获取A列最后一行数据的行号(与原代码逻辑保持一致)
    lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 定位F列首个空白单元格的行号
    firstBlankRow = ws.Cells(ws.Rows.Count, "F").End(xlUp).Row
    ' 处理F列全空的边界情况
    If firstBlankRow > 0 And ws.Cells(firstBlankRow, "F").Value <> "" Then
        firstBlankRow = firstBlankRow + 1
    Else
        firstBlankRow = 1
    End If
    
    ' 若F列已无需要填充的空白行,直接退出
    If firstBlankRow > lastrow Then Exit Sub
    
    ' 定义需要填充公式的范围
    Set fillRng = ws.Range(ws.Cells(firstBlankRow, "F"), ws.Cells(lastrow, "F"))
    
    ' 填入动态公式,Excel会自动适配每行的E、G列引用
    fillRng.Formula = "=ROUND(E" & firstBlankRow & "*G" & firstBlankRow & ",2)"
End Sub

关键修改点说明

  • 精准定位首个空白行:通过End(xlUp)找到F列最后一个非空单元格,再偏移一行得到首个空白行,同时处理F列全空的特殊情况,确保起始位置正确。
  • 动态公式适配:公式中使用当前空白行的行号生成初始引用,Excel在填充时会自动将行号调整为对应行的编号,例如首个空白行是F30时,公式会自动变为=ROUND(E30*G30,2)。
  • 边界校验:增加firstBlankRow > lastrow的判断,避免在F列已填满时执行无效操作。
  • 工作表绑定:新增ws变量指定目标工作表,避免代码依赖活动工作表,提升稳定性。

内容的提问来源于stack exchange,提问作者Orfevre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:05:26