【问题标题】:VBA search column for a string, and if found Copy the next Cell Data to a new Sheet字符串的 VBA 搜索列,如果找到,则将下一个单元格数据复制到新工作表
【发布时间】:2017-04-13 17:59:35
【问题描述】:

经过数小时的失败尝试和搜索互联网后,我没有找到我想要做的事情。我想扫描一列以查找字符串,如果找到,我想复制下一个单元格的值并将其粘贴到新工作表中,然后继续沿列向下查找下一个字符串并将其旁边的值复制到下一个单元格在另一张纸上。我已经获得了执行复制和粘贴的代码,但我不知道如何将粘贴位置向下移动到下一个单元格,这样它就不会继续覆盖。这是我目前所拥有的:

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

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

【问题讨论】:

    标签: excel vba


    【解决方案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
    

    【讨论】:

    • 谢谢@JNevill 我注意到在您回答之前我使用的是 .Cell 而不是 .Cells。有没有办法做到这一点,而不会使屏幕吓坏并且复制的单元格出现然后消失?我不会成为使用这个的人,所以我不希望每个人都来问我为什么每次他们使用电子表格时都会这样做。
    • 在您的代码之前,但在您的子程序中,您可以关闭应用程序的 ScreenUpdating 设置:application.screenupdating = false。在您的代码结束时,请确保将其切换回 True 否则您会有一些非常困惑的最终用户。
    • 如果不是range.copy... ,您只需根据另一个的值设置一个的值,您可能还会发现更好的行为。请注意,这不会复制格式或公式。 Sheets("WO Completion List").cells(rowCounter, 1).value = cell.Offset(0,1).value.
    • 最后一种方法更顺畅。我想我曾经尝试过,但我一直忘记细胞上的 s,这给我带来了问题。我仍然习惯于 VBA。感谢您的帮助。
    猜你喜欢
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多