将excel行从一个工作表复制到另一个工作表

时间:2016-09-10 18:14:52

标签: vba excel-vba excel

我正在将数据从一个工作表复制到另一个工作表,从源范围(Q5:AIxxx)到目标范围(C6:Uxxx)

我的VBA代码以单元格开头并循环到列的末尾以完成复制该列的数据:

Set s = Worksheets("Source")
Set d = Worksheets("Destination")

Dim i As Integer, j As Integer

j = 6
For i = 5 To 1500
   If s.Cells(i, 1).Value = "a" Or s.Cells(i, 1).Value = "b" Then
      d.Cells(j, 3).Value = s.Cells(i, 17).Value       
      j = j + 1
   End If
Next i

我有> 20列要移动,有没有办法可以一次复制行?像这样的东西:

d.Cells(j, 3:21).Value = s.Cells(i, 17:35).Value     

目前,我必须指定每一栏:

 d.Cells(j, 3).Value = s.Cells(i, 17).Value    'column 1
 d.Cells(j, 4).Value = s.Cells(i, 18).Value    'column 2
 d.Cells(j, 5).Value = s.Cells(i, 19).Value    'column 3
 etc

3 个答案:

答案 0 :(得分:1)

您可以使用:

.Range(<your_range>).copy

例如:

Activesheet.Range("A1:B10").Copy

然后只需粘贴到任何地方.Paste

ActiveSheet.Paste Destination:=Worksheets(2).Range("D1:D5")

这是vba中的内置功能。 另见复制范围:

https://msdn.microsoft.com/en-us/library/office/ff837760.aspx

对于粘贴: https://msdn.microsoft.com/en-us/library/office/ff821951.aspx

答案 1 :(得分:1)

您可以通过

来完成
    d.range(d.cells(j,3), d.cells(j,21)).copy
 s.range(s.cells(i,17), s.cells(i,35)).pastespecial xlvalues

答案 2 :(得分:1)

使用范围可以使它更容易一些:

    $product_id = '1,2,3';
    $products = explode(',', $product_id);
    $data = [];

    foreach($products as $products_id) {
        echo $products_id.'<br><br>'; //output: 1
        $query = $this->db->query('SELECT * FROM tbl_products WHERE products_id = "'.$products_id.'" AND products_status = "1"');
        $count = $query->num_rows();

        if($count > 0) {
            $data = array_merge($data, $query->result_array());
        }
    }

    if(empty($data)){
        return 0;
    } 
    return $data;

没有VBA,有更简单的方法可以做到这一点。例如,Power Query,PivotTable,Copy Link和Table Filter,Data选项卡&gt;来自Access等