Excel 循环仅在包含数据的行上粘贴

Excel 循环仅在包含数据的行上粘贴,excel,excel-formula,vba,Excel,Excel Formula,Vba,有人能帮我修改这个循环以进行复制和粘贴吗 我想粘贴范围(“S”&Y”)。仅当范围(“F”&Y”)中存在时间、日期或n/a形式的数据时,才在同一行中选择。我想重复这个过程,直到范围(“F”&Y)中的最后一个数据点。我现在在范围(“F”&Y)中的行中有数据,那么它不应该粘贴范围(“S”&Y)。当范围(“F”&Y)中有数据时,它每三行显示一次。有时,数据中有一个间隙,可能需要10行,直到下一个数据序列每三行返回一次 错误:即使范围(“F”&Y”)中没有数据,它也不会在该数据集的末尾停止并粘贴。有人能帮

有人能帮我修改这个循环以进行复制和粘贴吗

我想粘贴
范围(“S”&Y”)。仅当
范围(“F”&Y”)中存在时间、日期或n/a形式的数据时,才在同一行中选择
。我想重复这个过程,直到
范围(“F”&Y)
中的最后一个数据点。我现在在
范围(“F”&Y)
中的行中有数据,那么它不应该粘贴
范围(“S”&Y)
。当
范围(“F”&Y)
中有数据时,它每三行显示一次。有时,数据中有一个间隙,可能需要10行,直到下一个数据序列每三行返回一次

错误:即使
范围(“F”&Y”)中没有数据,它也不会在该数据集的末尾停止并粘贴。
有人能帮忙吗

我的代码

Dim lastRow As Long
Range("S16:Y16").Select
Selection.Copy
For Y = 19 To 2000 Step 3

    If Range("F" & Y).Value = lastRow Then Exit For
    Range("S" & Y).Select
    ActiveSheet.Paste
    lastRow = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row

Next Y
Application.ScreenUpdating = True
MsgBox lastRow

也许您可以使用S到Y列中的工作表公式执行此操作,如下所示:

=IF($F:$F<>"",S:S,"")
现在它将从最后一行向后运行到19行


您的代码正在对照最后一行的编号检查单元格范围(“F”&Y)或单元格(Y,6)的值。也许您可以使用S到Y列中的工作表公式执行此操作,如下所示:

=IF($F:$F<>"",S:S,"")
现在它将从最后一行向后运行到19行

您的代码正在对照最后一行的数量检查单元格范围(“F”&Y)或单元格(Y,6)的值。一些指针:

  • 首先,当
    lastRow
    大于2000并且您的
    if
    语句没有检查当前行号而只是检查其中的值时,它不会在末尾停止。另外,你很有可能跳过最后一排,因为你一次跳3排。我建议您使用以下
    if
    语句:

    If Range("F" & Y).row > lastRow Then Exit For
    
  • 对于您的
    lastrow
    变量,我建议以下内容更准确:

    lastrow = activesheet.cells.find("*", range("A1"), , , xlbyrows, xlprevious).row
    
  • 此外,您在每行中粘贴数据时没有检查空白值,我会使用以下方法检查空白单元格:

    if len(Application.WorksheetFunction.Clean(trim(range("F" & Y).value))) > 0 then
    
  • 几点建议:

  • 首先,当
    lastRow
    大于2000并且您的
    if
    语句没有检查当前行号而只是检查其中的值时,它不会在末尾停止。另外,你很有可能跳过最后一排,因为你一次跳3排。我建议您使用以下
    if
    语句:

    If Range("F" & Y).row > lastRow Then Exit For
    
  • 对于您的
    lastrow
    变量,我建议以下内容更准确:

    lastrow = activesheet.cells.find("*", range("A1"), , , xlbyrows, xlprevious).row
    
  • 此外,您在每行中粘贴数据时没有检查空白值,我会使用以下方法检查空白单元格:

    if len(Application.WorksheetFunction.Clean(trim(range("F" & Y).value))) > 0 then
    

  • 接下来,我在没有for的情况下遇到了编译错误。我不明白。停在下一个Ysorry,错过了一个终点如果,请立即尝试谢谢你的帮助。msg最后一行是1355,但它在1321停止。。。。它在数据集之间的空间是4而不是3之前停止过一次,但这不重要,所以我删除了一行,然后再次运行它。仍然没有转到最后一个数据行,它丢失了5个文件。任何想法。现在试试,它将从lastRow向后运行到row=19,在循环的每个迭代中跳过3行。顺便说一句,您可以检查vba.len(vba.trim(range(“F”)和Y.value))>0对于使用Debug.print vba.trim(range(“F”)和Y)遗漏的行是否正常工作.value在你的循环中?很抱歉,我不太擅长这个,但我正在学习。我想学习更好地理解它。我再次运行了它,但它没有反向运行。我还更改了这些单元格和行中的数据,它不会到达数据集的结尾。我如何进行测试?我下一个编译错误没有for。我不明白。停止d在Next Ysorry,错过了一个结尾如果,请立即尝试谢谢你的帮助。msg最后一行是1355,但它在1321停止…它在数据集之间的空格是4而不是3之前停止过一次,但这不重要,所以我删除了一行并再次运行。仍然没有转到最后一行,它错过了5个文件。有什么想法吗。现在尝试一下,它会成功的n从lastRow向后到row=19,每次循环迭代跳过3行。顺便说一句,您可以检查vba.len(vba.trim(range(“F”)和Y.value))>0对于使用Debug.print vba.trim(range(“F”)和Y)遗漏的行是否正常工作.循环中的值?很抱歉,我不是很擅长,但我正在学习。我想学习更好地理解它。我再次运行了它,但它没有反向运行。我还更改了这些单元格和行中的数据,它不会到达数据集的末尾。我如何进行测试?如果您选中空白
    范围(“F”&Y)的xk.value
    您是否需要跳到每三行?您能否告诉我们为什么要跳三行?如果可以,请在所有问题上选择一个答案,如果您选中空白的
    范围(“F”&Y).value
    您是否需要跳到每三行?能否告诉我们您为什么要跳三行?如果可以,请选择所有问题的答案