Vba 宏用于复制去年的行,在下面的行中插入复制的单元格,然后将年份更改为当前
我有一个大型数据表(“数据”),第一列有几行年份(如2013年12月31日),下面各列有各种数据 我试着制作一个宏,它穿过a列,找到每个包含31.12.2013的单元格,而在它下面没有包含31.12.2014的单元格。每次都应复制整行,将复制的单元格插入其下方的新行,并将日期从2013年12月31日更改为2014年12月31日 因为这是我第一次尝试制作宏,所以我不知道我在做什么。这是我在混合了我在网上找到的一些代码和内置录音机中的一些代码后得到的,希望有人能制作出一些真正可以做任何事情的东西:Vba 宏用于复制去年的行,在下面的行中插入复制的单元格,然后将年份更改为当前,vba,excel,Vba,Excel,我有一个大型数据表(“数据”),第一列有几行年份(如2013年12月31日),下面各列有各种数据 我试着制作一个宏,它穿过a列,找到每个包含31.12.2013的单元格,而在它下面没有包含31.12.2014的单元格。每次都应复制整行,将复制的单元格插入其下方的新行,并将日期从2013年12月31日更改为2014年12月31日 因为这是我第一次尝试制作宏,所以我不知道我在做什么。这是我在混合了我在网上找到的一些代码和内置录音机中的一些代码后得到的,希望有人能制作出一些真正可以做任何事情的东西:
Sub Nyttaarsregnskap()
Dim searchSheet As Worksheet
Dim currentRow As Long
Dim lastRow As Long
Set searchSheet = Sheets("Data")
Application.ScreenUpdating = False
searchSheet.Activate
lastRow = searchSheet.Cells(Rows.Count, "A").End(xlUp).Row
For currentRow = 1 To lastRow
If InStr(LCase(searchSheet.Cells(currentRow, "A")), "12/31/2013") > 0 Then
If Not InStr(LCase(searchSheet.Cells(currentRow + 1, "A")), "12/31/2014") > 0 Then
searchSheet.Rows(currentRow & ":" & currentRow).Copy
Cells(currentRow + 1, "A").Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
Cells(currentRow + 1, "A").FormulaR1C1 = "12/31/2014"
lastRow = lastRow + 1
End If
End If
Next currentRow
End Sub
试试这个:
Sub Nyttaarsregnskap()
Dim searchSheet As Worksheet
Dim currentRow As Long
Dim lastRow As Long
Application.ScreenUpdating = False
Set searchSheet = Sheets("Data")
With searchSheet
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
For currentRow = lastRow To 1 Step -1
If Format(.Cells(currentRow, "A"), "mm/dd/yyyy") = Format("12/31/2013", "mm/dd/yyyy") Then
If Not Format(.Cells(currentRow + 1, "A"), "mm/dd/yyyy") = Format("12/31/2014", "mm/dd/yyyy") Then
.Range(currentRow + 1 & ":" & currentRow + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
.Rows(currentRow & ":" & currentRow).Copy .Cells(currentRow + 1, "A")
.Cells(currentRow + 1, "A").FormulaR1C1 = "12/31/2014"
End If
End If
Next currentRow
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
很难准确描述运行此宏时发生的情况。它似乎在复制和插入行,但也会删除(或覆盖?)其他行,并将以前的行的顺序弄乱。此外,它不会将新行的日期更改为2014年。它不会删除任何内容。如果当前行有
“12/31/2013”
,而下一行没有“12/31/2014”,则只需添加新行即可。然后添加新行“12/31/2014”。这是您想要的吗?它似乎适用于某些行(无论如何是第一行),但在大多数情况下,它会将行混在一起,当我再次按升序排序时,2014年复制的值与2013年的值不同。其中一行是唯一一个这样的例子,根本没有复制,只是将其年份改为2014年。很奇怪。也许这几行中有一些公式,需要执行PasteSpecial->PasteValues而不是仅仅粘贴?当我手动执行此操作时,我选择行(Shift+Space),复制它(CMD+C),下移一行并插入复制的单元格(Ctrl+“+”),这除了占用时间外效果非常好,所以我认为这不应该是一个问题?