如何使用VBA将Excel数据粘贴至另一工作簿的昨日日期列下
解决Excel数据粘贴到昨日日期对应列的问题
嘿,我来帮你搞定这个需求!不管是手动操作还是自动化宏,都给你整理清楚了:
方法一:手动快速操作(适合偶尔用)
如果只是偶尔做一次,手动找列粘贴最直接:
- 先选中你要复制的B3到B8区域,按
Ctrl+C复制数据; - 切换到mastersheet,在第一行的日期表头里找到昨天的日期(比如你例子里的2/20/2018),点击这个日期所在的列标(比如A列)选中整列;
- 按
Ctrl+↓直接跳到该列最后一条数据的位置,再按一下↓就能定位到要粘贴的空白单元格; - 最后按
Ctrl+V粘贴就搞定啦。
方法二:VBA宏自动化(适合重复操作)
如果需要经常做这个操作,写个小宏能省超多时间,步骤如下:
- 打开你的Excel文件,按
Alt+F11打开VBA编辑器; - 右键点击左侧的工作簿名称,选「插入」→「模块」;
- 把下面的代码粘贴到模块窗口里:
Sub PasteToYesterdayColumn() Dim srcSheet As Worksheet Dim masterSheet As Worksheet Dim yesterdayDate As Date Dim targetColumn As Range Dim lastRow As Long ' 这里改成你实际的源工作表名称(就是存B3:B8数据的表) Set srcSheet = ThisWorkbook.Worksheets("你的源表名称") Set masterSheet = ThisWorkbook.Worksheets("mastersheet") ' 获取昨天的日期 yesterdayDate = Date - 1 ' 在主表第一行找昨天的日期列 On Error Resume Next Set targetColumn = masterSheet.Rows(1).Find(What:=yesterdayDate, LookIn:=xlValues, LookAt:=xlWhole) On Error GoTo 0 ' 如果找到对应列就粘贴 If Not targetColumn Is Nothing Then srcSheet.Range("B3:B8").Copy ' 找到目标列最后一行的下一个空白行 lastRow = masterSheet.Cells(masterSheet.Rows.Count, targetColumn.Column).End(xlUp).Row + 1 ' 只粘贴值(要粘贴格式的话改成xlPasteAll) masterSheet.Cells(lastRow, targetColumn.Column).PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ' 取消复制状态 MsgBox "数据已经成功粘贴到昨天日期的列啦!" Else MsgBox "没找到昨天的日期列哦,检查下表头的日期格式是不是和系统一致~" End If End Sub
- 把代码里的
"你的源表名称"改成实际存放B3:B8数据的工作表名字; - 按
F5运行宏,或者回到Excel界面按Alt+F8选择这个宏运行就行。
小提醒
- 要确保主表第一行的日期是日期格式,不是文本格式,不然宏可能找不到对应列;如果表头是文本日期,可以把代码里的
LookIn:=xlValues改成LookIn:=xlFormulas试试; - 如果需要连格式、公式一起粘贴,把代码里的
xlPasteValues换成xlPasteAll就可以了。
内容的提问来源于stack exchange,提问作者Gopi Krishna




