抱歉,我问的问题不太清楚,但我整个上午都在研究宏,希望它能帮我完成一项任务,但通过谷歌搜索,我并没有找到我需要的答案。我使用的是 Windows 10 和 Excel 2016。这是我录制的宏:
Sub biweekly()
'
' biweekly Macro
'
' Keyboard Shortcut: Ctrl+w
'
Rows("53:53").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A52:C52").Select
Selection.Cut Destination:=Range("A53:C53")
Range("M52").Select
Selection.Cut Destination:=Range("M53")
Range("D53").Select
ActiveCell.FormulaR1C1 = "=R[-2]C+R[-1]C"
Range("D53").Select
Selection.Copy
Range("E53:L53").Select
ActiveSheet.Paste
Range("D53:L53").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Rows("51:52").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A54").Select
End Sub
本质上,我将每周行合并为双周行。我以前使用数据透视表和 getpivotdata 做过这个,但这次我希望有一个更优雅的解决方案。我希望宏在完成后循环,向下移动 3 行以处理接下来的两周(因此,在这个例子中,如果我在删除单个每周行后创建的新行现在是第 51 行,我希望向下移动到第 54 行并在其上方插入一个新行以开始处理第 52 和第 53 周行对)。
我不知道如何循环宏,以便它在每个循环中跳转到下一行。我还想让宏有条件地停止运行,比如当 A 列中的值发生变化时(我有一个按字母顺序排列的大型工作表,其中包含两年的双周工资数据,我希望宏在每个名称的末尾停止,以便我可以调整工资期连接并为新名称再次运行它)。或者,知道如何让它运行一定次数(比如 30 次)也是一个不错的选择。
任何有关这些问题的帮助都将不胜感激。再次抱歉,我对宏和 VBE 不熟悉。
答案1
有关循环的一些帮助请访问如何使用 VBA 代码循环重复任务。最简单的循环是For i = 1 to 30
在开始和Next i
结束处。
对于其他问题,请尝试抵消财产:
要选择当前单元格下方三行的单元格,
Selection.Offset(3, 0).Select
如果单元格与上面三行的单元格不同,则停止宏,
If Selection.Value <> Selection.Offset(-3, 0).Value Then Exit Sub
录制宏是一个很好的开始。当您更熟悉 VBA 代码时,您可能会合并以 结尾.Select
和以 开头的行Selection.
。