宏,用于不使用select即可将单元格复制四行

时间:2018-10-10 05:12:13

标签: excel vba excel-vba

此代码从Sheet1!A2,Sheet1!B2等复制条目,并将它们粘贴到Sheet2,每个条目之间有3行。我想复制此代码而不使用.select。

Option Explicit

Sub Copy_Paste()

Dim i As Integer
For i = 1 To 100
    Sheets("Sheet1").Select 
    Range("A2,B2,C2,D2,E2").Select 
    ActiveCell.Range(Cells(i, 1), Cells(i, 2)).Select
    Selection.Copy 
    Sheets("Sheet2").Select 
    Cells(((i - 1) * 4) + 1, 1).Select 
    ActiveSheet.Paste 
Next i

End Sub

这是我到目前为止的内容,但是没有用。

Option Explicit

Sub Copy_Paste()

Dim i As Integer
For i = 1 To 100
    Dim ws1 As Worksheet, rng As Range, act As Range
        Set ws1 = Worksheets("Data")
        Set rng = ActiveSheet.Range("A2,B2,C2,D2,E2")
        Set act = ActiveCell.Range(Cells(i, 1), Cells(i, 2))
    Selection.Copy
    Dim ws2 As Worksheet, rng2 As Range
        Set ws2 = Worksheets("Calculate")
        Set rng2 = Cells(((i - 1) * 4) + 1, 1)
    ActiveSheet.Paste
Next i

End Sub

3 个答案:

答案 0 :(得分:0)

我在我的vba代码之一中使用了这种类型的操作:

$table2 = DB::table('t2')
         ->rightJoin('t1', 't1.id', '=', 't2.t1_id')

$table1 = DB::table('t1')
        ->leftJoin('t2', 't1.id', '=', 't2.t1_id')
        ->unionAll($table1)
        ->get();

因此您可以根据自己的情况进行编辑。

答案 1 :(得分:0)

您可以使用Offset()对象的Range属性

Sub Copy_Paste()
    Dim i As Long
    For i = 1 To 100
        Sheets("Sheet1").Range("A2,B2").Offset(i - 1).Copy Destination:=Sheets("Sheet2").Range("A1:B1").Offset((i - 1) * 4)
    Next
End Sub

如果仅需要粘贴值,则速度更快:

Sub Copy_Paste_Values()
    Dim i As Long
    For i = 1 To 100
        Sheets("Sheet2").Range("A1:B1").Offset((i - 1) * 4).Value = Sheets("Sheet1").Range("A2,B2").Offset(i - 1).Value
    Next
End Sub

答案 2 :(得分:0)

您知道您只能说“范围x值=范围y值”之类的话:

ws2.Range("A1:B4").Value = ws1.Range("A1:B4").Value

如果您可以使用Range(Cells(1,1), Cells(4,2))定义范围,那么我很确定您可以在一行中完成您想做的所有事情