Excel 在三列集合中循环&复制行(3列),然后循环到下一组3列
*我正在编写一个宏,它将一张工作表转换为另一张工作表中的一列< 每个月有3列a、b、c。接下来的一个月是d,e,f,在表中移动直到AJ列 a列*日期 b列*所用小时数 comn c*同意/拒绝。 下个月是 列*日期< 列*所用小时数 comn*同意/拒绝。 如果列b大于0.1小时,则仅复制该行 我已经编写了代码来循环第一个月,但如何让它在接下来的11个月中循环11组,从左到右,共有三列*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
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。。。而不是。范围。。。。我正在修改我的帖子以达到这个效果。现在效果很好,谢谢你的帮助!我很高兴能帮上忙。作为其他读者的指南,为了提高我的知名度,请选择答案。