我正在按照“PasteSpecial”帮助菜单的步骤操作,但是我的代码似乎总是出现错误。
我想要将Worksheets("Sheet1").Range("A1","A5")
转置后粘贴到Worksheets("Sheet2").Range("A1","E1")
中。
有什么最简单的方法可以实现这个目标吗?
Worksheets("Sheet1").Range("A1:A5").Copy
Worksheets("Sheet2").Range("A1").PasteSpecial Transpose:=True
以下是一种不使用剪贴板的高效选项。
Sub transposeAndPasteRow(rowToCopy As Range, pasteTarget As Range)
pasteTarget.Resize(rowToCopy.Columns.Count) = Application.WorksheetFunction.Transpose(rowToCopy.Value)
End Sub
像这样使用它。
Sub test()
Call transposeAndPasteRow(Worksheets("Sheet1").Range("A1:A5"), Worksheets("Sheet2").Range("A1"))
End Sub
pasteTarget
限制了粘贴的单元格数量。例如,当复制此代码时,它只会将 Worksheets("Sheet1").Range("A1")
的值粘贴到 Worksheets("Sheet2").Range("A1")
。但是,当我将代码修改为 Worksheets("Sheet1").Range("A1:E1")
时,它可以正常工作。显然,当要复制的单元格范围是动态的,并且如果粘贴目标太小,则不会复制所有内容,如果太大,则会在前导单元格中放置 #N/A
,这是主要问题所在。 - Steven PomponiopasteTarget.Resize(, rowToCopy.Rows.Count) = Application.WorksheetFunction.Transpose(rowToCopy.Value)
,主要修改是Resize
参数。 - Steven PomponiotransposeAndPasteColumn
的不同函数。 - GollyJerWorksheetFunction Transpose()
使用Transpose
选项进行复制、粘贴的替代方法是直接输入公式,可以简化操作。
=TRANSPOSE(Sheet1!A1:A5)
或者如果您更喜欢VBA:
Dim v
v = WorksheetFunction.Transpose(Sheet1.Range("A1:A5"))
Sheet2.Range("A1").Resize(1, UBound(v)) = v
注意: 您也可以使用后期绑定的Application.Transpose
。
Microsoft 365帮助文档指出,如果您有当前版本的Microsoft 365,则可以直接在目标范围的左上角单元格中输入公式,否则必须通过Ctrl+Shift+Enter输入公式作为传统数组公式来确认它。
版本 Excel版本2007+,自2011年以来的Mac,适用于Microsoft 365