首页 > 解决方案 > 如何复制(从 COL)和粘贴(到 ROW)(替换特定位置的数据)?

问题描述

我有一个小问题。我放在一起的代码从 A 列获取数据sheet(1)并将其复制(将其转换为行)到sheet(2). 虽然,在我粘贴它之前(这里是我开始录制宏的时间点),我去“控制+右”找到第一个填充的单元格(在第 2 行(sheet(2)),然后我选择粘贴在数据中转置它和替换我已经拥有的数据(到行)。

问题是我有 1000 列需要以这种方式转置为行(在每种情况下,行都从 上的不同点开始sheet(2))并替换旧数据。有人可以建议吗?它需要某种循环(我知道)。

Sub test()

Dim ws1, ws2 As Worksheet, lr As Long

Set ws1 = ThisWorkbook.Sheets(1): Set ws2 = ThisWorkbook.Sheets(2)

lr = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row

ws1.Range("A2:A" & lr).Copy

With ws2
'I have recorded this part
ws2.Activate
Range("A2").Select
    Selection.End(xlToRight).Select
    Selection.End(xlToRight).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
End With
End Sub

一些用于澄清的屏幕:

在此处输入图像描述

这里 ws2 数据从每行的不同点开始(我需要将 ws1 中的数据复制到 ws2 并准确替换每行开始的数据):

在此处输入图像描述

标签: excelvba

解决方案


请尝试下一个代码:

Sub testCopyTranspose()
 Dim ws1, ws2 As Worksheet, lr As Long, lastCol As Long, LastCol2 As Long, i As Long

 Set ws1 = ThisWorkbook.Sheets(1): Set ws2 = ThisWorkbook.Sheets(2)

 lastCol = ws1.cells(1 & Columns.count).End(xlToLeft).Column

 For i = 1 To lastCol
    lr = ws1.cells(Rows.count, i).End(xlUp).Row
    LastCol2 = ws2.cells(i + 1, 1).End(xlToRight).Column
    ws1.Range(ws1.cells(2, i), ws1.cells(lr, i)).Copy
    ws2.cells(i + 1, LastCol2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
                                               SkipBlanks:=False, Transpose:=True
 Next i
End Sub

推荐阅读