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

VBA宏问题:按日指定起始单元格,实现A列最后一行的Vlookup

问题分析

原代码的核心问题是计算了A列最后账号行的LastRow但完全没用到这个变量,反而用ActiveCell.End(xlDown)确定公式填充的结束行——这个方法是基于当前激活单元格所在列的非空数据,而非A列的账号列表范围。如果当前列下方是空行(到合计行),End(xlDown)会直接跳到合计行,导致公式覆盖合计区域,生成#N/A错误。

修正后的代码
Sub Vlookup()
    Dim LastRow As Long
    Dim targetCol As Range
    
    ' 用With语句操作Balances工作表,避免Activate的潜在问题
    With Worksheets("Balances")
        ' 确定要写入余额的目标列(第2行的下一个空列)
        If .Range("C2").Value > 0 Then
            Set targetCol = .Range("C2").End(xlToRight).Offset(0, 1)
        Else
            Set targetCol = .Range("C2")
        End If
        
        ' 校验日期是否匹配
        If Sheets("Todays Bals").Range("A2") <> .Cells(1, targetCol.Column) Then
            MsgBox "这些余额属于不同日期,请导入正确的报表"
            Exit Sub
        End If
        
        ' 获取A列最后一个有账号的行(避开下方的合计行)
        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
        
        ' 从目标列第2行开始,到LastRow行,批量写入VLOOKUP公式
        .Range(targetCol, .Cells(LastRow, targetCol.Column)).Formula = _
            "=VLOOKUP(A2,'Todays Bals'!B:C,2,FALSE)"
    End With
End Sub
关键修改点
  • 用上计算好的LastRow:直接以A列最后账号行作为公式填充的结束行,确保不会触及下方的合计行
  • 替换Select/Activate为With语句:避免激活单元格带来的逻辑混乱,代码更稳定
  • 明确目标列范围:通过targetCol定位要写入的列,结合LastRow精准控制公式填充的区域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:13:33