Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Vba 宏用于复制去年的行,在下面的行中插入复制的单元格,然后将年份更改为当前_Vba_Excel - Fatal编程技术网

Vba 宏用于复制去年的行,在下面的行中插入复制的单元格,然后将年份更改为当前

Vba 宏用于复制去年的行,在下面的行中插入复制的单元格,然后将年份更改为当前,vba,excel,Vba,Excel,我有一个大型数据表(“数据”),第一列有几行年份(如2013年12月31日),下面各列有各种数据 我试着制作一个宏,它穿过a列,找到每个包含31.12.2013的单元格,而在它下面没有包含31.12.2014的单元格。每次都应复制整行,将复制的单元格插入其下方的新行,并将日期从2013年12月31日更改为2014年12月31日 因为这是我第一次尝试制作宏,所以我不知道我在做什么。这是我在混合了我在网上找到的一些代码和内置录音机中的一些代码后得到的,希望有人能制作出一些真正可以做任何事情的东西:

我有一个大型数据表(“数据”),第一列有几行年份(如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+“+”),这除了占用时间外效果非常好,所以我认为这不应该是一个问题?