VBA- 将行复制并粘贴到另一个 sheet 上作为值

VBA- Copy and pasting row on another sheet as a value

我正在根据单元格值中的条件将行从一个 sheet 移动到另一个。如果满足单元格值,则移动到另一个 sheet。但是,当它移动时,我需要它作为值移动。我的一个单元格中有一个公式,我只想要新 sheet 中该单元格的值。下面是我的代码的一部分,它移动了行。我的问题是我应该在哪里添加 PasteSpecial 或等效代码以将其作为值移动?谢谢!

    For Each xCell In xRg
    If CStr(xCell.Value) = "Pipeline" Then
        xCell.EntireRow.Copy Destination:=Worksheets("Pipeline2").Range("A" & B + 1)
        xCell.EntireRow.Delete
        B = B + 1

我不相信你可以(这很奇怪)但你必须声明原始工作表,然后复制,然后粘贴特殊内容,然后返回..像这样:

'......
Set ws1 = Activeworksheet
  For Each xCell In xRg
    If CStr(xCell.Value) = "Pipeline" Then
        xCell.EntireRow.Copy Destination:=Sheets("Pipeline2").Range("A" & B + 1)
        Sheets("Pipeline2").Activate
        Sheets("Pipeline2").Range("A" & B + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
        ws1.astivate
        xCell.EntireRow.Delete
        B = B + 1

如果您只想要这些值,您可以将范围设置为彼此相等。

For Each xCell In xRg
    If CStr(xCell.Value) = "Pipeline" Then
        Worksheets("Pipeline2").Range("A" & B + 1).EntireRow.Value = xCell.EntireRow.Value

        xCell.EntireRow.Delete
        B = B + 1

编辑:要同时保留格式,

For Each xCell In xRg
    If CStr(xCell.Value) = "Pipeline" Then
        Worksheets("Pipeline2").Range("A" & B + 1).EntireRow.Value = xCell.EntireRow.Value
        xCell.EntireRow.Copy
        Worksheets("Pipeline2").Range("A" & B + 1).EntireRow.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
        xCell.EntireRow.Delete
        B = B + 1

基于 "Batman" 解决方案,您可以将实际复制的范围值限制为所需的 最小值 (即从第 1 列到该行中最后一个非空单元格) :

For Each xCell In xRg
    If CStr(xCell.Value) = "Pipeline" Then
        With xCell.Parent
            With .Range(.Cells(xCell.row, 1), .Cells(xCell.row, .Columns.count).End(xlToLeft))
               Worksheets("Pipeline2").Range("A" & B + 1).Resize(.Columns.count).Value = .Value
            End With
        End With
        xCell.EntireRow.Delete
        B = B + 1

像这样的东西应该适合你。

Sub copy_paste() 
    Dim i As Integer 

    i = 2 

    Sheets("Sheet1").Select 
    Range("E2").Select 

    Do While ActiveCell <> "" 
        If Range("E" & ActiveCell.Row) <> "" And Range("F" & ActiveCell.Row) <> "" Then 
            Range("E" & ActiveCell.Row).Copy Sheets(Sheet3).Range("B" & i) 
            Range("F" & ActiveCell.Row).Copy Sheets(Sheet3).Range("E" & i) 
            Range("A" & ActiveCell.Row).Copy Sheets(Sheet3).Range("F" & i) 
            Range("H" & ActiveCell.Row).Copy Sheets(Sheet3).Range("G" & i) 
            Range("I" & ActiveCell.Row).Copy Sheets(Sheet3).Range("H" & i) 
            Range("K" & ActiveCell.Row).Copy Sheets(Sheet3).Range("I" & i) 
            i = i + 1 
        End If 
        ActiveCell.Offset(1, 0).Select 
    Loop 

End Sub