我有一个不断更新的电子表格,用于跟踪项目,但我想为内部利益相关者创建一个摘要视图。我希望将列转置为行,从名为"Tasks“的工作表转到名为”评估更改“的工作表。
我试着录制一个宏,下面是我录制的内容:
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的新手,非常感谢您的帮助。
发布于 2019-10-26 06:00:37
以下是找到要复制的最后一列的一种方法:
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发布于 2019-10-26 18:22:53
根据你的截图,你可以尝试这样做:
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发布于 2019-10-29 02:33:02
根据上面的反馈和一些谷歌帮助,我尝试了一下,它工作得很好:
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非常感谢你的帮助!
https://stackoverflow.com/questions/58565667
复制相似问题