请求开发共享Excel文件中跨工作表转置粘贴的VBA宏
VBA宏解决方案:转置粘贴数据到指定工作表
我帮你写了这个针对性的VBA宏,完全匹配你的需求——把Input表J5:J9的纵向数据转置成横向行,粘贴到Reports表的最后可用行。直接复制到你的Excel VBA编辑器里就能用:
Sub TransposeAndPasteData() Dim wsInput As Worksheet Dim wsReports As Worksheet Dim lastRow As Long ' 定义目标工作表对象 Set wsInput = ThisWorkbook.Worksheets("Input") Set wsReports = ThisWorkbook.Worksheets("Reports") ' 定位Reports工作表的最后一行(以A列为例,可根据实际数据列调整) lastRow = wsReports.Cells(wsReports.Rows.Count, "A").End(xlUp).Row + 1 ' 转置复制粘贴:把Input的纵向区域转成横向,粘贴到Reports的新行开头 wsInput.Range("J5:J9").Copy wsReports.Cells(lastRow, "A").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True ' 清除剪贴板,避免后续误操作 Application.CutCopyMode = False MsgBox "数据已成功转置粘贴!", vbInformation End Sub
细节调整说明:
- 代码里用了
xlPasteValues只粘贴纯数值,如果你需要保留原单元格的格式,把这个参数改成xlPasteAll就行 - 定位最后一行是基于A列判断的,如果你的Reports表数据起始列不是A,把代码里的
"A"改成对应的列字母(比如数据从C列开始就写"C") - 末尾的提示弹窗是为了确认操作完成,不需要的话直接删掉
MsgBox那一行
快速使用步骤:
- 打开你的Excel文件,按下
Alt + F11打开VBA编辑器 - 右键点击左侧的工作簿名称,选择「插入」→「模块」
- 把上面的代码粘贴到空白模块里
- 按下
F5运行宏,或者回到Excel界面给宏添加一个自定义按钮,方便日常一键执行
内容的提问来源于stack exchange,提问作者ks_1029




