首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VBA将列转置为行从一个工作表到另一个工作表,其中包含正在进行的列

使用VBA将列转置为行从一个工作表到另一个工作表,其中包含正在进行的列
EN

Stack Overflow用户
提问于 2019-10-26 05:00:27
回答 3查看 439关注 0票数 0

我有一个不断更新的电子表格,用于跟踪项目,但我想为内部利益相关者创建一个摘要视图。我希望将列转置为行,从名为"Tasks“的工作表转到名为”评估更改“的工作表。

我试着录制一个宏,下面是我录制的内容:

代码语言:javascript
复制
Sub TransposeColToRow()
    ' TransposeColToRow Macro
    Range("B3:B14").Select
    Selection.Copy
    Range("B20").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub

错误消息显示:运行时错误'1004':此选择无效。确保复制和粘贴区域不重叠,除非它们具有相同的大小和形状。

我目前所拥有的(新项目作为新列添加到其中,因此新项目将进入列I):

我想要的是将第2-10行转置到“评估更改”表中,这样新的列就会转置到新的行:

因此,在上面的示例中,当我在"Tasks“表中添加一个新项目时,该项目被添加到第一列。但是当我运行我录制的宏时,弹出错误消息,并且没有将任何新列复制到行中。

我在考虑添加一个按钮,并为它分配一个VBA,这样每次单击它时,它都会用新列更新,并再次转置。但我不知道该怎么做。我是VBA的新手,非常感谢您的帮助。

EN

回答 3

Stack Overflow用户

发布于 2019-10-26 06:00:37

以下是找到要复制的最后一列的一种方法:

代码语言:javascript
复制
Dim lastCol As Long

With Sheets("Tasks")
    'find the last used column on row 3
    lastCol = .Cells(.Columns.Count, 3).End(xlToLeft).Column
    .Range(.Range("B3"), .Cells(14, lastCol)).Copy
End With

'paste and translose
Sheets("Assessment Changes").Range("B3").PasteSpecial Paste:=xlPasteAll, _
              Operation:=xlNone, SkipBlanks:=False, Transpose:=True
票数 0
EN

Stack Overflow用户

发布于 2019-10-26 18:22:53

根据你的截图,你可以尝试这样做:

代码语言:javascript
复制
With Sheets("Tasks").UsedRange
    .Resize(.Rows.Count - 1, .Columns.Count - 2).Offset(1, 2).Copy
End With

Sheets("Assessment Changes").Range("A6").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
票数 0
EN

Stack Overflow用户

发布于 2019-10-29 02:33:02

根据上面的反馈和一些谷歌帮助,我尝试了一下,它工作得很好:

代码语言:javascript
复制
Sub Transpose_columns_to_rows()
  Dim sh1 As Worksheet, sh2 As Worksheet, lr As Long, j As Long
  Set sh1 = Sheets("Tasks")  'origin
  Set sh2 = Sheets("Assessment Changes")  'destiny
  sh2.Range("A6", sh2.Cells(Rows.Count, Columns.Count)).ClearContents
  lr = 6
  For j = 3 To sh1.Cells(2, Columns.Count).End(xlToLeft).Column
    sh2.Range("A" & lr).Resize(1, 10).Value = Application.Transpose(sh1.Cells(2, j).Resize(10).Value)
    lr = lr + 1
  Next
End Sub

非常感谢你的帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58565667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档