VBA-将另一个工作表上的行复制并粘贴为值

时间:2016-12-19 16:10:40

标签: excel vba paste

我根据单元格值中的条件将行从一个工作表移动到另一个工作表。如果满足单元格值,它将移动到另一个工作表。但是当它移动时,我需要它作为值移动。我的一个单元格中有一个公式,我只想在新表格中找到该单元格的值。下面是我移动行的代码的一部分。我的问题是我在哪里添加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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我不相信你可以(这很奇怪)但是你必须声明原始工作表,然后复制,然后粘贴,然后回去......这样的事情:

'......
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

答案 2 :(得分:0)

在“蝙蝠侠”解决方案的基础上,您可以将实际复制的范围值限制为所需的最小值(即从该行的第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

答案 3 :(得分:0)

这样的事情应该适合你。

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