将数据复制并粘贴到所选行

时间:2016-05-25 08:03:24

标签: excel vba excel-vba

我有一个来自我的工作代码的代码片段,它将来自其他工作表的数据复制并粘贴到一个masterworkbooks mastersheet。下面的代码允许我将数据从BX列复制并粘贴到列A的第一个空行,并对列CC到列B的第一个空行执行相同的操作。但是,我想将列CC粘贴到B列(第10行)。我怎么能这样做?

 lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row

 With copySheet.Range("BX2:BX" & lRow)
   pasteSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
   .Resize(.Rows.Count, .Columns.Count) = .Value
 End With

 'Determine last row of Column B in copySheet
 lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row

 With copySheet.Range("CC2:CC" & lRow)
  pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
  .Resize(.Rows.Count, .Columns.Count) = .Value
 End With

您能告诉我如何确定要复制的行数吗?

编辑:现在我想为另一列添加if条件,应该说:

  

如果

     
    工作表“数据”中的

列U具有单元格值“8636”,然后是这些值     应粘贴到工作表“KomKo”(浆料表)中的H列;到了     下一行,因为我在“with”部分使用了上面的代码。

  
     

否则(如果H列中的值不是8636)则应粘贴

     
    此列中的

值到工作表“KomKo”(浆料表)中的G列     与上述相同的偏好

  

我该怎么做?

2 个答案:

答案 0 :(得分:2)

pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Resize(.Rows.Count, .Columns.Count) = .Value更改为pasteSheet.Range("B10").Resize(.Rows.Count, .Columns.Count) = .Value

*************回答问题编辑**************** *******添加了maxR - H列和G *******的最后一行 你可以做这样的事情来得到你需要的东西:

Sub check8636values()

    Dim copySheet, pasteSheet As Worksheet
    Dim lRowU, lRowH, lRowG, maxR, i As Long

    'Dont forget to change to the correct sheet names!!!!
    Set copySheet = ThisWorkbook.Sheets("data")
    Set pasteSheet = ThisWorkbook.Sheets("KomKo")

    lRowU = copySheet.Cells(copySheet.Rows.Count, "U").End(xlUp).Row

    For i = 1 To lRowU

        lRowG = pasteSheet.Cells(pasteSheet.Rows.Count, "G").End(xlUp).Row + 1
        lRowH = pasteSheet.Cells(pasteSheet.Rows.Count, "H").End(xlUp).Row + 1
        maxR = Application.Max(lRowG,lRowH)

        If copySheet.Cells(i, "U").Value = "8636" Then

            pasteSheet.Cells(maxR, "H").Value = copySheet.Cells(i, "U").Value
            pasteSheet.Cells(maxR, "Y").Value = copySheet.Cells(i, "T").Value

        Else

            pasteSheet.Cells(maxR, "G").Value = copySheet.Cells(i, "U").Value
            pasteSheet.Cells(maxR, "X").Value = copySheet.Cells(i, "T").Value

        End If

    Next i

End Sub

答案 1 :(得分:2)

由于您只处理单列范围,因此With-End With块不需要缩写Resize方法参数:仅使用lRow作为第一个

此外,由于您没有显示copySheetpasteSheet是否来自同一工作簿,因此在.Rows.Count之前引用它们更安全,并防止从源工作簿excel版本派生问题< / p>

    'Determine last row of Column B in copySheet
    lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row

    pasteSheet.Cells(pasteSheet.Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(lRow) = copySheet.Range("BX2:BX" & lRow).Value        
    pasteSheet.Range("B10").Resize(lRow).Value = copySheet.Range("CC2:CC" & lRow).Value