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

