VBA代码用于插入包含合并单元格的新行

时间:2014-01-28 16:17:39

标签: excel vba excel-vba

所有

我需要一些认真的帮助。我没有创建excel电子表格,但我正在尝试为朋友更正。

问题是,该电子表格被公司中的许多人使用,并且它并不总是包含相同数量的行。

我使用以下VBA代码插入一个新行,该行复制上面的单元格并粘贴到新行。问题是它没有合并单元格,也没有将公式带到AM Column的下一行。

如何修改现有的VBA代码以合并单元格并保持上一行的格式并修改下一行的公式

我无法找到附加我正在使用的数据库副本的位置,以便您可以看到数据库。请帮助解决这个问题

以下是我目前使用的代码:(BTW)---我是VBA Stupid所以请尽量保持简单。下面的代码是从别人那里借来的,以满足我的需求。

以下是AM列中需要复制和修改下一行的公式:

= IFERROR(INDEX(表Sheet 3!A2:D5,MATCH($ AK $ 13(表Sheet 3!A1:D1),0),MATCH($ AL $ 13(表Sheet 3 E2:E5),0)),0 )

下面的公式应该是:

= IFERROR(INDEX(表Sheet 3!A2:D5,MATCH($ AK $ 14(表Sheet 3!A1:D1),0),MATCH($ AL $ 14(表Sheet 3 E2:E5),0)),0 )

Sub InsertRowFormulas()
Application.ScreenUpdating = False
Dim cell As Range
Selection.EntireRow.Insert
For Each cell In Intersect(ActiveSheet.UsedRange, Selection.Offset(-1, 0).EntireRow)
If cell.HasFormula Then
cell.Copy cell.Offset(1, 0)
End If
Next
Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:0)

您需要解决两个问题。

首先,您需要将公式设置为correct reference locking,这样当您在新行中自动填充公式时,引用会正确更新。如果要在复制公式时不调整行或列引用,请在前面加上$。

=IFERROR(INDEX(Sheet3!$A$2:$D$5,
               MATCH($AK13,Sheet3!$A$1:$D$1,0),
               MATCH($AL13,Sheet3!$E$2:$E$5,0)),0)

使用正确的锁定,您只需复制整行即可保留合并的单元格。我不确定是否需要宏 - 这可能更容易训练电子表格的用户如何复制行,这在Excel中是一个非常简单的操作。

Dim dest As Range

Selection.EntireRow.Insert
Set dest = Selection.Worksheet.Cells(Selection.Row, 1)
dest.Offset(1).Resize(, dest.Worksheet.UsedRange.Columns.Count).Copy dest