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

修改Excel VBA宏实现每次运行时数据自动粘贴到目标工作表下一行

调整后可实现追加写入不覆盖的VBA代码

Sub TestThat()

' 声明变量
Dim DataSh As Worksheet
Dim finalSh As Worksheet
Dim monthsRange As Range
Dim rCell As Range
Dim i As Long

' 赋值工作表对象
Set DataSh = ThisWorkbook.Sheets("Salary Sheet")
Set finalSh = ThisWorkbook.Sheets("Final Salary")

' 定位Salary Sheet表A列从第3行开始到最后一个非空单元格的范围
Set monthsRange = DataSh.Range(DataSh.Cells(3, 1), DataSh.Cells(Rows.Count, 1).End(xlUp))

' 核心修改:获取Final Salary表A列最后一个非空行的行号,作为写入的起始基准
i = finalSh.Cells(finalSh.Rows.Count, "A").End(xlUp).Row

' 遍历所有待检查的单元格
For Each rCell In monthsRange
    ' 匹配Menu表E6单元格的值
    If rCell = Sheets("Menu").Range("E6").Value Then
        ' 行号+1,写入到下一行空行
        i = i + 1
        finalSh.Cells(i, 1) = rCell.Offset(0, 0) ' 月份
        finalSh.Cells(i, 2) = rCell.Offset(0, 1) ' 员工ID
        finalSh.Cells(i, 3) = rCell.Offset(0, 2) ' 员工姓名
        finalSh.Cells(i, 4) = rCell.Offset(0, 3) ' 职位
        finalSh.Cells(i, 5) = rCell.Offset(0, 22) ' 薪资总额
    End If
Next rCell

End Sub

核心修改说明

  • 移除了原代码中固定的i = 2逻辑,改为每次运行代码时自动读取「Final Salary」工作表A列最后一行有数据的行号,作为写入的基准行
  • 逻辑兼容首次运行场景:如果「Final Salary」是空表(仅第1行有表头/完全空白),会自动从第2行开始写入数据,和原有逻辑兼容
  • 若你的「Final Salary」没有表头需要从第1行开始写入,仅需将i = finalSh.Cells(finalSh.Rows.Count, "A").End(xlUp).Row替换为i = finalSh.Cells(finalSh.Rows.Count, "A").End(xlUp).Row - 1即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:04