VBA搜索列的字符串,如果找到则将下一个单元格数据复制到新工作表

时间:2017-04-13 17:59:35

标签: excel-vba vba excel

在经过几个小时的失败尝试和搜索互联网之后,我没有找到我想要做的事。我想扫描查找字符串的列,如果找到,我想复制下一个单元格的值并将其粘贴到新工作表中,然后继续向下列的下一个字符串并将其旁边的值复制到下一个单元格中在另一张纸上。我已经得到了我的代码来进行复制和粘贴,但我无法弄清楚如何将粘贴位置向下移动到下一个单元格,因此它不会继续覆盖。以下是我到目前为止的情况:

For Each cell in SrchRng
     If cell.Value = "1_Complete" Then
          cell.Offset(0,1).Copy Sheets("WO Completion List").[A1]
     End If
Next cell

我已经尝试使用整数i,其中列出了A1单元格,然后在目标中使用i = i + 1增量,但它不起作用。我觉得这很简单,但我无法理解。也许我需要创建一个数组?我是VBA的新手,我习惯使用Java或C ++。

快速更新:

我没有使用“.Cells”我离开了“s”所以我已经开始工作了。我这样做了:

For Each cell In SrchRng
     If cell.Value = "1_Complete" Then
         cell.Offset(0, 1).Select
         Selection.Copy
         Sheets("WO Completion List").Cells(i, 1).PasteSpecial xlPasteValues
         i = i + 1
     End If
 Next cell

我现在的问题是,有更好的方法吗?当我运行该功能时,它会导致屏幕闪烁一堆并将列表复制到一张纸上,然后值消失,这看起来很奇怪。

1 个答案:

答案 0 :(得分:1)

跟踪要复制到哪一行并递增。我认为这里的真正变化是你如何引用一个范围。而不是[A1]使用格式.Range("A1")或者,用于递增.Cells(1,1),其中第一个参数是行,第二个参数是列。你也可以在这里使用.Offset(),但如果事情变得嵌套,那可能会让人感到困惑。

'declare an integer to keep track of the row to write to
Dim rowCounter as integer

'set to 1 for row 1 to start
rowCounter = 1
For Each cell in SrchRng
     If cell.Value = "1_Complete" Then
          cell.Offset(0,1).Copy Sheets("WO Completion List").Cells(rowCounter, 1)
          'we wrote out a value, so increment to the rowCounter to the next row
          rowCounter = rowCounter + 1
     End If
Next cell