Excel VBA遍历F列按条件在同行G列写入对应公式的实现方法
VBA 动态生成F列对应G列公式实现方案
你原有代码有两个核心问题,修正后即可正常运行:
- 范围赋值写法错误:
LastRow是存储行号的数值变量,不能直接作为Range()的参数,需要拼接成合法的单元格范围地址 - 同行跨列定位方法:遍历F列单元格时,用
Offset(0,1)即可定位到同行右侧1列的G列单元格,不需要额外计算行列号
完整可运行代码
Sub WriteGColumnFormula() Dim ws As Worksheet Dim LastRow As Long Dim CL As Range Dim Rng As Range ' 绑定要处理的工作表,避免激活错表导致运行异常 Set ws = ThisWorkbook.Worksheets("Sheet1") ' 动态获取F列最后一个有值的行号,适配行数频繁变动的场景 LastRow = ws.Cells(ws.Rows.Count, "F").End(xlUp).Row ' 定义要遍历的F列范围:如果第1行是表头,把F1改成F2即可 Set Rng = ws.Range("F1:F" & LastRow) ' 遍历逐行判断写入公式 For Each CL In Rng If CL.Value = "" Then ' F列空值:G列写入同行Q列引用 CL.Offset(0, 1).Formula = "=Q" & CL.Row Else ' F列有供应商编号:G列写入指定VLOOKUP公式 CL.Offset(0, 1).Formula = "=VLOOKUP(F" & CL.Row & ",Mapping!$A$4:$B$1000,2,FALSE)" End If Next CL End Sub
注意事项
- 如果你的数据集第一行是表头,不需要处理表头行,把范围定义行的
"F1:F"修改为"F2:F"即可 - 代码直接写入单元格的
Formula属性,和手动在单元格输入公式效果完全一致,后续F列/Q列/Mapping表数据更新时,G列公式会自动重算 - 直接通过对象属性赋值,不需要逐行选中单元格,运行效率更高
内容的提问来源于stack exchange,提问作者heimy22
相关产品推荐
相关产品推荐

