Excel VBA - 如果单元格值满足条件,则在工作表之间复制单元格

时间:2015-03-05 23:26:24

标签: excel-vba vba excel

此代码有效,但它正在使用dstRow.Row并将其作为要复制的行。我不希望这样。我想使用srcMatchRow = cell.Row

我错过了什么?

Sub CopyCellsBetweenSheets()
  Dim srcFile As String
  Dim dstFile As Workbook
  Dim srcSheet As Worksheet
  Dim dstSheet As Worksheet
  Dim cell As Range
  Dim i As Integer
  Dim lastRow As Integer
  Set dstFile = Application.Workbooks.Open("C:\dev\t\each.xlsm")
  Set srcSheet = ThisWorkbook.Worksheets("Final")
  Set dstSheet = dstFile.Worksheets("RoomA")
  srcLastRow = srcSheet.Range("A" & Rows.Count).End(xlUp).Row
  dstRow = 11  'start copy on row 11
  For Each cell In srcSheet.Range("A1:A" & srcLastRow)
    If cell.Value >= 8 And cell.Value <= 10 Then
      srcMatchRow = cell.Row
      srcSheet.Range("A" & srcMatchRow & ":L" & srcMatchRow).Copy
      dstSheet.Range("A" & dstRow & ":L" & dstRow).PasteSpecial
      dstRow = dstRow + 1
    End If
  Next
End Sub

具体示例获取cols A:L,以获取srcFile中列A值为8,9或10的行。然后将这些相应的列复制到dstFile中的第11,12,13行。

相反,它找到匹配的列A单元格在第20行,然后忽略它,而不是抓取第11行上的任何内容,无论它是否满足条件。

为了概括,我想从另一个工作簿中的一行中获取符合条件的行,并保存到从dstRow开始的行;每增加一场比赛,dstRow递增1。

2 个答案:

答案 0 :(得分:1)

你需要澄清细胞的价值,因为它实际上是一个范围,可能是这样的:

For Each cell In srcSheet.Range("A1:A" & srcLastRow).Rows

答案 1 :(得分:0)

这是不检查源数据的情况。

单元格已在工作表“Final”中重新排序,并使用公式,因此我一直在复制公式。解决方案是:

    dstSheet.Range("A" & dstRow & ":L" & dstRow).PasteSpecial Paste:=xlPasteValues