【发布时间】:2012-01-13 15:14:48
【问题描述】:
我正在尝试一些非常简单的事情,但我似乎被卡住了。我正在关注PasteSpecial 的帮助菜单,但我似乎无法让我的代码正常工作。
我想取Worksheets("Sheet1").Range("A1","A5") 并将转置粘贴到Worksheets("Sheet2").Range("A1","E1")。
最简单的方法是什么?
【问题讨论】:
我正在尝试一些非常简单的事情,但我似乎被卡住了。我正在关注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 放在前导单元格中。
pasteTarget.Resize(, rowToCopy.Rows.Count) = Application.WorksheetFunction.Transpose(rowToCopy.Value) . Resize 参数的主要变化。
transposeAndPasteColumn 的不同函数。 ?
WorksheetFunction Transpose()
无需通过 PasteSpecial 进行复制、粘贴和使用 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。
MS help reference 声明使用当前版本的 Microsoft 365,可以简单地在目标区域的左上角单元格中输入公式,否则公式必须作为旧版输入数组公式通过Ctrl+Shift+Enter确认。
版本 Excel 版本。 2007 年以上,2011 年以来的 Mac,Microsoft 365 的 Excel
【讨论】: