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
我正在根据单元格值中的条件将行从一个 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