VBA代码,用于将电子表格中的所有公式转换为除上一个活动行之外的值

时间:2016-06-08 16:53:35

标签: excel vba excel-vba

由于我每周都在工作簿中输入一行新数据,因此我需要Excel来识别最后一个活动行是什么,以及需要从公式更改为值的所有内容。这是因为我不希望我的前几周数据在每周更新参考表时更改为最新数据。我使用一个宏,它将复制/插入一个新行,其行与上面的行具有相同的公式,因此最后一行数据包含所有公式,这就是我不希望更改的原因。任何帮助或建议将不胜感激! 以下是我在上一个活动行下面的复制/插入公式的内容:

Sub RunAll()

 Dim ws As Worksheet
 For Each ws In Sheets
    ws.Activate

    ' Go to last cell
    Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Select

    ' Copy formula from cell above
    Rows(Selection.Row - 1).Copy
    Rows(Selection.Row).Insert Shift:=xlDown
Next ws

End Sub

2 个答案:

答案 0 :(得分:1)

假设我们使用了列 A ,并且列 A 中的最后一个值标记了输入的最后一行。这将删除除底行之外的所有公式:

Sub FormulaKiller()
    Dim N As Long, rng As Range

    N = Cells(Rows.Count, "A").End(xlUp).Row
    Set rng = Range(Cells(1, 1), Cells(N - 1, Columns.Count))

    rng.Copy
    rng.PasteSpecial (xlPasteValues)
End Sub

修改#1:

正如 Scott Craner 所指出的,我们可以取代:

rng.Copy
rng.PasteSpecial (xlPasteValues)

使用:

rng.value=rng.value

这可以避免使用剪贴板,也不会干扰工作表的选择状态。

答案 1 :(得分:0)

With Cells(Rows.Count, 2).End(xlUp).Offset(-1, 0)
    .Copy
    .PasteSpecial Paste:=xlPasteValues
End With