EXCEL VBA,插入空行和移位单元格

时间:2013-04-04 16:37:37

标签: excel excel-vba vba

我无法输入整个空白行。我正在尝试移动列A-AD(Z列四列)。

目前,单元格A-O具有内容。细胞O-AD是空白的。但我正在运行一个宏来将数据放在当前数据的右侧(列O)。

我可以使用

插入一行
dfind1.Offset(1).EntireRow.Insert shift:=xlDown

但它似乎只是从A-O转移。我已经设法使用for循环降低O-AD

dfind1 as Range
For d = 1 To 15
    dfind1.Offset(2, (d + 14)).Insert shift:=xlDown
Next d

有没有办法降低30个细胞VS 15?同样,我想将15转移到右边的单元格。目前我还有另一个for循环设置。

至于其余代码,请在下面。基本上合并两个excel表基于在A列中找到匹配。我已经标记了问题区域。其余的代码大部分都有效。

Sub combiner()

    Dim c As Range, d As Long, cfind As Range, x, y, zed, dest As Range, cfind1 As Range, dfind As Range, _
    dfind1 As Range, crow, x_temp, y_temp

    On Error Resume Next
    Worksheets("sheet3").Cells.Clear
    With Worksheets("sheet1")
    .UsedRange.Copy Worksheets("sheet3").Range("a1")
    End With

    With Worksheets("sheet2")
    For Each c In Range(.Range("a3"), .Range("a3").End(xlDown))
    x = c.Value
    y = c.Next

    Set cfind = .Cells.Find(what:=y, lookat:=xlWhole)
    .Range(cfind.Offset(0, -1), cfind.End(xlToRight)).Copy

        With Worksheets("sheet3")
            Set dfind1 = .Cells.Find(what:=x, lookat:=xlWhole)
            If dfind1 Is Nothing Then GoTo copyrev

            '**************************************************************
            '**************************************************************
            'This is the problem Area
            'I'm basically having trouble inserting a blank row
            dfind1.Offset(1).EntireRow.Insert shift:=xlDown



            For d = 1 To 15
                dfind1.Offset(1).Insert shift:=xlToRight
            Next d

            For d = 1 To 15
                dfind1.Offset(2, (d + 14)).Insert shift:=xlDown
            Next d
            '**************************************************************
            '**************************************************************


        End With 'sheet3
        GoTo nextstep

    copyrev:
        With Worksheets("sheet3")
            x_temp = .Cells(Rows.Count, "A").End(xlUp).Row
            y_temp = .Cells(Rows.Count, "P").End(xlUp).Row
            If y_temp > x_temp Then GoTo lr_ed
            lMaxRows = x_temp
            GoTo lrcont
    lr_ed:
            lMaxRows = y_temp
    lrcont:
            .Range(("P" & lMaxRows + 1)).PasteSpecial
            Worksheets("sheet2").Range(cfind.Offset(0, -1), cfind.Offset(0, 0)).Copy
            .Range(("A" & lMaxRows + 1)).PasteSpecial
        End With 'sheet3


    nextstep:
    Next


    lngLast = Range("A" & Rows.Count).End(xlUp).Row

    With Worksheets("Sheet3").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A1:A2" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("B3:Z" & lngLast)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With


    End With  'sheet2
        Application.CutCopyMode = False
End Sub

2 个答案:

答案 0 :(得分:26)

如果您想将所有内容都降下来,可以使用:

Rows(1).Insert shift:=xlShiftDown

同样地将一切都转移过来:

Columns(1).Insert shift:=xlShiftRight

答案 1 :(得分:1)

Sub Addrisk()

Dim rActive As Range
Dim Count_Id_Column as long


Set rActive = ActiveCell

Application.ScreenUpdating = False

with thisworkbook.sheets(1) 'change to "sheetname" or sheetindex
    for i = 1 to .range("A1045783").end(xlup).row
        if 'something'  = 'something' then
            .range("A" & i).EntireRow.Copy 'add thisworkbook.sheets(index_of_sheet) if you copy from another sheet
            .range("A" & i).entirerow.insert shift:= xldown 'insert and shift down, can also use xlup
            .range("A" & i + 1).EntireRow.paste 'paste is all, all other defs are less.
            'change I to move on to next row (will get + 1 end of iteration)
            i = i + 1
        end if

            On Error Resume Next
                .SpecialCells(xlCellTypeConstants).ClearContents
            On Error GoTo 0

        End With
    next i
End With



Application.CutCopyMode = False
Application.ScreenUpdating = True

End Sub