复制范围并将粘贴转置到包含单元格的行
Copy range and transpose paste into row that contains cell
我有一些代码,我发现它们似乎可以工作,但在更改一些内容后不再有效。我正在尝试复制一个 sheet ("Sheet1") 范围内的值并将它们粘贴到另一个 ("Sheet2") 上。问题是我只想将它们粘贴到 A 列中的值等于相同 sheet 上的 ("B2") 中的值的行中。此外,此值将在整个 A 列重复,但我只需要将其粘贴到第 11 行和第 29 行之间的行。这是我目前所拥有的:
Sub PasteData()
Range("O3:O44").Select
Selection.copy
Worksheets("Sheet2").Activate
Worksheets("Sheet2").Unprotect ("Password")
Dim nRow As Long
Dim nStart As Long, nEnd As Long
For nRow = 11 To 29
If Range("A" & nRow).Value = Range("b2").Value Then
nStart = nRow
Exit For
End If
Next nRow
For nRow = nStart To 29
If Range("a" & nRow).Value <> Range("b2").Value Then
nEnd = nRow
Exit For
End If
Next nRow
nEnd = nEnd - 1
Range("A" & nStart & ":AP" & nEnd).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Worksheets("Sheet2").Protect Password:="Password", DrawingObjects:=True, Contents:=True, Scenarios:=False
Worksheets("Sheet3").Activate
Range("B13").Select
End Sub
我注意到您的代码没有引用 Range("O3:O44")
的 sheet。因此,当您 运行 代码时,它会 Select 并复制活动 sheet 的 Range("O3:O44")
。
为避免这种混淆,请尽可能避免使用 .Select
和 .Activate
,尤其是在处理多个 sheet 时。引用范围时,请始终包含您要定位的 sheet。
所以代替:
Range("O3:O44").Select
Selection.Copy
这样做:
Worksheets("Sheet1").Range("O3:O44").Copy
现在要回答您的问题,您需要指出 sheet Range("O3:O44")
的来源。
然后在粘贴之前将此代码移动到行上。
'range to copy with sheet reference
Worksheets("Sheet1").Range("O3:O44").Copy
'range where previous range will be pasted, also with sheet reference
Worksheets("Sheet2").Range("A" & nStart & ":AP" & nEnd).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
在尝试您的代码后,这是您遇到的错误的解决方案。
我有一些代码,我发现它们似乎可以工作,但在更改一些内容后不再有效。我正在尝试复制一个 sheet ("Sheet1") 范围内的值并将它们粘贴到另一个 ("Sheet2") 上。问题是我只想将它们粘贴到 A 列中的值等于相同 sheet 上的 ("B2") 中的值的行中。此外,此值将在整个 A 列重复,但我只需要将其粘贴到第 11 行和第 29 行之间的行。这是我目前所拥有的:
Sub PasteData()
Range("O3:O44").Select
Selection.copy
Worksheets("Sheet2").Activate
Worksheets("Sheet2").Unprotect ("Password")
Dim nRow As Long
Dim nStart As Long, nEnd As Long
For nRow = 11 To 29
If Range("A" & nRow).Value = Range("b2").Value Then
nStart = nRow
Exit For
End If
Next nRow
For nRow = nStart To 29
If Range("a" & nRow).Value <> Range("b2").Value Then
nEnd = nRow
Exit For
End If
Next nRow
nEnd = nEnd - 1
Range("A" & nStart & ":AP" & nEnd).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Worksheets("Sheet2").Protect Password:="Password", DrawingObjects:=True, Contents:=True, Scenarios:=False
Worksheets("Sheet3").Activate
Range("B13").Select
End Sub
我注意到您的代码没有引用 Range("O3:O44")
的 sheet。因此,当您 运行 代码时,它会 Select 并复制活动 sheet 的 Range("O3:O44")
。
为避免这种混淆,请尽可能避免使用 .Select
和 .Activate
,尤其是在处理多个 sheet 时。引用范围时,请始终包含您要定位的 sheet。
所以代替:
Range("O3:O44").Select
Selection.Copy
这样做:
Worksheets("Sheet1").Range("O3:O44").Copy
现在要回答您的问题,您需要指出 sheet Range("O3:O44")
的来源。
然后在粘贴之前将此代码移动到行上。
'range to copy with sheet reference
Worksheets("Sheet1").Range("O3:O44").Copy
'range where previous range will be pasted, also with sheet reference
Worksheets("Sheet2").Range("A" & nStart & ":AP" & nEnd).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
在尝试您的代码后,这是您遇到的错误的解决方案。