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
相关产品推荐
相关产品推荐

