Excel VBA将行复制到其他工作表中的空行

Excel VBA将行复制到其他工作表中的空行,excel,vba,Excel,Vba,我试图创建一个宏,将数据从工作表a复制到工作表B。 工作表A只填充了数据,没有任何布局。 工作表B有一个特殊的布局,其中应粘贴工作表a的数据。 工作表B的前10行有一个标题,因此复制应从第11行开始。工作表A中的数据从第2行开始。所以第2(A)行=>第11(B)行,第3(A)行=>第12(B)行,。。。 这部分问题的代码包含在下面 我正在努力解决的问题是,在工作表B中,只有列F中没有值的行才应该使用。 因此,如果工作表B中的行11-61在列F中没有值,则工作表A的行2-52应该在工作表B中的行1

我试图创建一个宏,将数据从工作表a复制到工作表B。 工作表A只填充了数据,没有任何布局。 工作表B有一个特殊的布局,其中应粘贴工作表a的数据。 工作表B的前10行有一个标题,因此复制应从第11行开始。工作表A中的数据从第2行开始。所以第2(A)行=>第11(B)行,第3(A)行=>第12(B)行,。。。 这部分问题的代码包含在下面

我正在努力解决的问题是,在工作表B中,只有列F中没有值的行才应该使用。 因此,如果工作表B中的行11-61在列F中没有值,则工作表A的行2-52应该在工作表B中的行11-61粘贴。如果单元F62不是空的,则应该跳过下一行工作表A(行52),在工作表B中的行63中粘贴,以此类推,直到列F.

中的数据的下一行为止。 迄今为止的守则:

Sub RO()
'
' RO Macro
'
' Sneltoets: Ctrl+Shift+S
'

    Dim a As Range
    Dim j As Integer
    Dim Source As Worksheet
    Dim Target As Worksheet

    ' Change worksheet designations as needed
    Set Source = ActiveWorkbook.Worksheets("SO")
    Set Target = ActiveWorkbook.Worksheets("RO")

    j = 11     ' Start copying to row 11 in target sheet
    For Each a In Source.Range("A2:A10000")   ' Do 10000 rows
        If a <> "" Then
           Source.Rows(a.Row).Copy Target.Rows(j)
           Target.Rows(j).Value = Source.Rows(a.Row).Value
           j = j + 1
        End If
    Next a
Sub-RO()
'
'反渗透宏
'
'snelotes:Ctrl+Shift+S
'
使范围变暗
作为整数的Dim j
将源设置为工作表
将目标变暗为工作表
'根据需要更改工作表名称
Set Source=ActiveWorkbook.Worksheets(“SO”)
设置目标=活动工作簿。工作表(“RO”)
j=11'开始复制到目标工作表中的第11行
对于Source.Range(“A2:A10000”)中的每个a,执行10000行
如果是“”,那么
Source.Rows(a.Row).复制Target.Rows(j)
Target.Rows(j).Value=Source.Rows(a.Row).Value
j=j+1
如果结束
下一个

提前谢谢

尝试使用两个单独的计数,一个用于跟踪要复制的源行,另一个用于跟踪要粘贴的目标行。然后,您可以根据行是否通过条件等独立增加它们


如果要粘贴块,则有两组行计数:源开始和源结束、粘贴开始和粘贴结束。这并不奇怪,但允许最大限度地控制和处理异常等。

我通常使用这段代码来复制粘贴值。 很快

    Public Sub Copy()

        Dim Source As Worksheet
        Dim SourceRow As Long
        Dim SourceRange As String

        Dim Target As Worksheet
        Dim TargetRow As Long
        Dim TargetRange As String

        Dim ColumnCount As Long

        Set Source = ActiveWorkbook.Worksheets("Blad1")
        Set Target = ActiveWorkbook.Worksheets("Blad2")

        TargetRow = 11
        ColumnCount = Source.UsedRange.Columns.Count

        For SourceRow = 1 To Source.UsedRange.Rows.Count

            SourceRange = Range(Cells(SourceRow, 1), Cells(SourceRow, ColumnCount)).Address

While Target.Cells(TargetRow, 6).value <> ""
TargetRow = TargetRow + 1
Wend

TargetRange = Range(Cells(TargetRow, 1), Cells(TargetRow, ColumnCount)).Address

Target.Range(TargetRange).Value = Source.Range(SourceRange).Value

            TargetRow = TargetRow + 1
        Next

    End Sub
公共子副本()
将源设置为工作表
将源行变暗为长
将SourceRange设置为字符串
将目标变暗为工作表
暗淡的目标和长的一样
作为字符串的Dim TargetRange
暗列与长列数相同
Set Source=ActiveWorkbook.Worksheets(“Blad1”)
设置目标=活动工作簿。工作表(“Blad2”)
TargetRow=11
ColumnCount=Source.UsedRange.Columns.Count
对于SourceRow=1到Source.UsedRange.Rows.Count
SourceRange=范围(单元格(SourceRow,1),单元格(SourceRow,ColumnCount))。地址
而Target.Cells(TargetRow,6).value“”
TargetRow=TargetRow+1
温德
TargetRange=范围(单元格(TargetRow,1),单元格(TargetRow,ColumnCount))。地址
Target.Range(TargetRange).Value=Source.Range(SourceRange).Value
TargetRow=TargetRow+1
下一个
端接头

因此,首先定义所有目标范围,如2-35、36-78、81-92,。。。然后用这些信息定义源范围?这确实有效。认为实现条件(F列为空)的解决方案可能可以使用if语句,如果单元格(TargetRow,F)为空,则粘贴,否则移动到下一行。但实际上并不知道如何将其转换为工作VBA代码:),因此它需要搜索F列未填充的行?当我尝试执行宏时,While命令会产生错误。它是单元格的大写C吗?我现在正在打电话,所以我会从头开始,但你基本上会一直循环,直到你找到一个空的手机。等等,试试“Wend”而不是“End While”