使用 VBA 插入一行并自动填充

Posted

技术标签:

【中文标题】使用 VBA 插入一行并自动填充【英文标题】:Insert a row and autofill using VBA 【发布时间】:2017-04-03 12:17:16 【问题描述】:

我有一个在电子表格中插入一行的宏,我希望它自动填充新插入行中的公式。

这是我的电子表格中的一个示例。

编辑:在我目前的电子表格中有 10 列和几行,但下面我只复制了一列

   ColumnB
    TextA
    TextA
    TextA
    TextA
    TextB
    TextB
    TextB
    TextB
    TextC
    TextC
    TextC
    TextC

以下代码在TextATextBTextC等之后添加一个新行

Sub Insert()

  Dim LastRow As Long
  Dim Cell As Range

Application.ScreenUpdating = False

    LastRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(-4162).Row

    For Each Cell In Sheets("Sheet1").Range("B7:B" & LastRow)
        If Cell.Value <> Cell.Offset(1, 0) Then
            If Cell.Value <> "" Then
                Sheets("Sheet1").Rows(Cell.Row + 1).Insert
            End If
        End If
    Next Cell

Application.ScreenUpdating = True

End Sub

有没有办法自动填充公式?

我想在我的循环中插入一行代码,如下所示,就在添加新行之后。这个问题是Range 参数。我不知道在其中指定什么

Selection.AutoFill Destination:=Range("A21:J22"), Type:=xlFillDefault

【问题讨论】:

添加类似 range(cell,cell.offset(1,0)) 【参考方案1】:

你可以试试这样的……

Sub Insert()

Dim LastRow As Long
Dim LastCol As Long
Dim i As Long
Dim Cell As Range

Application.ScreenUpdating = False

LastRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

'Assuming Row6 is the header row
LastCol = Sheets("Sheet1").Cells(6, Columns.Count).End(xlToLeft).Column

For i = LastRow To 8 Step -1
    If Cells(i, 2) <> "" And Cells(i, 2) <> Cells(i - 1, 2) Then
        Range(Cells(i - 1, 1), Cells(i - 1, LastCol)).Copy
        Cells(i, 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Range(Cells(i, 1), Cells(i, LastCol)).SpecialCells(xlCellTypeConstants, 3).ClearContents
    End If
Next i
Application.ScreenUpdating = True

End Sub

【讨论】:

【参考方案2】:

如您所知,您可以在“下一个单元格”语句之后插入以下任何方法:

Excel.Cells.Range("B7:B" & LastRow).Value = "=MOD(OFFSET(A7,-1,0)+ (A6<>OFFSET(A6,-1,0)),2)" 'or any function you like, e.g. '=SUM(A1+A2)'
Excel.Cells.Range("B7:B" & LastRow).Value = "0"
Excel.Cells.Range("B7:B" & LastRow).NumberFormat = "General"
Excel.Cells.Range("B7:B" & LastRow).FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, Formula1:="=B6=1")

【讨论】:

以上是关于使用 VBA 插入一行并自动填充的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 使用插入的行应用自动填充(基于输入框)并将其应用到其他工作表

在 Excel VBA 中对一系列单元格使用自动填充

如何使用 VBA 动态自动填充目标?

如何使用不同的变量在 VBA 中自动填充范围

Excel VBA 自动填充问题

运行代码时,它返回 - 范围类的自动填充方法在代码的最后一行失败:VBA