Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在三列集合中循环&复制行(3列),然后循环到下一组3列_Excel_Vba - Fatal编程技术网

Excel 在三列集合中循环&复制行(3列),然后循环到下一组3列

Excel 在三列集合中循环&复制行(3列),然后循环到下一组3列,excel,vba,Excel,Vba,*我正在编写一个宏,它将一张工作表转换为另一张工作表中的一列< 每个月有3列a、b、c。接下来的一个月是d,e,f,在表中移动直到AJ列 a列*日期 b列*所用小时数 comn c*同意/拒绝。 下个月是 列*日期< 列*所用小时数 comn*同意/拒绝。 如果列b大于0.1小时,则仅复制该行 我已经编写了代码来循环第一个月,但如何让它在接下来的11个月中循环11组,从左到右,共有三列* Sub CopyACross() Dim lastrow As Long, i As Long, erow

*我正在编写一个宏,它将一张工作表转换为另一张工作表中的一列< 每个月有3列a、b、c。接下来的一个月是d,e,f,在表中移动直到AJ列 a列*日期 b列*所用小时数 comn c*同意/拒绝。 下个月是 列*日期< 列*所用小时数 comn*同意/拒绝。 如果列b大于0.1小时,则仅复制该行 我已经编写了代码来循环第一个月,但如何让它在接下来的11个月中循环11组,从左到右,共有三列*

Sub CopyACross()

Dim lastrow As Long, i As Long, erow As Long,

lastrow = Sheets("sheet1").Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To lastrow

Sheets("sheet1").Select


If cells(i, 2).Value > 0.1 Then

Range(cells(i, 1), cells(i, 3)).Select
Selection.Copy

Sheets("sheet4").Select

erow = ActiveSheet.cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
ActiveSheet.cells(erow, 1).Select
ActiveSheet.Paste
End If
Next i



End Sub

您只需要将现有代码嵌入到另一个计算列数的循环中。下面的代码没有经过测试。请提醒我它可能包含的任何打字错误

Sub CopyAcross()
    ' 015

    Dim WsTarget As Worksheet
    Dim lastRow As Long, R As Long, eRow As Long
    Dim C As Long

    Set WsTarget = Worksheets("Sheet4")
    With WsTarget
        ' count the rows in the same sheet where you set the range
        eRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    End With

    For C = 0 To 11
        With Worksheets("Sheet1")
            ' count the rows in the same sheet where you set the range
            lastRow = .Cells(.Rows.Count, (C * 3 + 1)).End(xlUp).Row

            For R = 2 To lastRow
            '    Sheets("sheet1").Select        ' don't Select anything
                If .Cells(R, (C * 3 + 2)).Value > 0.1 Then
                    eRow = eRow + 1
                    .Range(.Cells(R, (C * 3 + 1)), .Cells(R, (C * 3 + 3))).Copy _
                            Destination:=WsTarget.Cells(eRow, 1)
                End If
            Next R
        End With
    Next C
End Sub

我已经冒昧地删除了您的代码所做的所有选择。它们不是必需的,只是在降低代码执行速度的同时增加了代码量。

这正是我想要实现的,但是当我粘贴到代码中时,返回的运行时错误是“1004”,erow=行上出现了应用程序定义的错误或对象定义的错误。是的,我的错误。很抱歉。对于eRow和lastRow,代码都应该是.Cells。。。而不是。范围。。。。我正在修改我的帖子以达到这个效果。现在效果很好,谢谢你的帮助!我很高兴能帮上忙。作为其他读者的指南,为了提高我的知名度,请选择答案。