【问题标题】:Excel VBA - Range.Copy transpose pasteExcel VBA - Range.Copy 转置粘贴
【发布时间】:2012-01-13 15:14:48
【问题描述】:

我正在尝试一些非常简单的事情,但我似乎被卡住了。我正在关注PasteSpecial 的帮助菜单,但我似乎无法让我的代码正常工作。

我想取Worksheets("Sheet1").Range("A1","A5") 并将转置粘贴到Worksheets("Sheet2").Range("A1","E1")

最简单的方法是什么?

【问题讨论】:

标签: excel transpose vba


【解决方案1】:
Worksheets("Sheet1").Range("A1:A5").Copy
Worksheets("Sheet2").Range("A1").PasteSpecial Transpose:=True

【讨论】:

  • 谢谢,我没有将过去的特殊命令放在新行上。
  • 我不得不将转置粘贴到一组不同的单元格中。因此,如果从 A1:B5 复制,则必须过去到 A6
【解决方案2】:

这是一个不使用剪贴板的有效选项。

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 放在前导单元格中。
  • 为了让它正常工作,将 Range("A1:A5") 复制到 Range("A1:E1") 我需要将您的第一个代码修改为以下内容:pasteTarget.Resize(, rowToCopy.Rows.Count) = Application.WorksheetFunction.Transpose(rowToCopy.Value) . Resize 参数的主要变化。
  • 您创建了一个名为 transposeAndPasteColumn 的不同函数。 ?
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-29
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多