我基本上想要从单元格中删除公式,但希望保留计算值。
所以,我很容易实现它并且效果很好,但非常慢。(1800个单元约2分钟)
我有:
Dim col As Excel.Range = getRange()
For Each cell In col
cell.Value = cell.Value
Next
我尝试对第一个单元格执行此操作,然后自动填充其余单元格,但是将第一个单元格的值复制到列中的其余单元格。
那么,我该怎样做才能让它变得快......
我认为必须有一些与自动填充有关的东西可以解决这个问题。
请帮助!!
答案 0 :(得分:8)
有时Excel会在更改完成后重新计算整个工作表。在执行此类操作时暂时禁用自动重新计算可以显着缩短执行时间。
根据this forum post ,可以通过以下方式完成:
Application.Calculation = xlManual
' code here
Application.Calculation = xlAutomatic
答案 1 :(得分:8)
如果你碰巧知道你的范围的确切地址,或者你可以得到它(可能使用getRange()?),这似乎对我来说从细胞中删除一个公式同时保持结果:
Worksheets("Sheet1").Range("A1:F15").Value = Worksheets("Sheet1").Range("A1:F15").Value
答案 2 :(得分:6)
我注意到在玩Excel VBA时,除了几行代码之外的任何东西都可以拖动,但到目前为止,“运行速度”的最大增幅是;
Sub NoScreenRePainting()
Application.ScreenUpdating=False
'Your code here.
Application.ScreenUpdating=True
End Sub
答案 3 :(得分:4)
正如@Stuart所提到的......将Special粘贴为值......
Dim oRange As Excel.Range
Set oRange = getRange()
oRange.Copy
oRange.PasteSpecial xlPasteValues
请注意,使用剪贴板可能会很棘手......希望其他人知道(快速)方法不使用剪贴板。
答案 4 :(得分:3)
选择值范围Copy
然后Paste Special / Values
会不会更容易?用值代替公式,应该或多或少是瞬时的。
答案 5 :(得分:3)
确保所有公式都计算了它们的值,然后复制并粘贴为值以删除公式并仅保留计算值。这是一个例子:
Public Sub RemoveFormulas()
Dim RangeWithFormulas As Range
Set RangeWithFormulas = ThisWorkbook.Sheets("Test").Range("A1:A1800")
RangeWithFormulas.Copy
RangeWithFormulas.Range("A1").PasteSpecial xlPasteValues
End Sub
答案 6 :(得分:-2)
我建议您选择包含公式和粘贴值的所有单元格,试试这个:
Sub RemoveFormula()
Dim cell As Range
'Excel function to select cells with formulas
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
For Each cell In Selection
cell.Value = cell.Value
Next cell
End Sub
清洁简单的结果。