希望你一切顺利。
对于我的工作,我做了一个VBA宏,其中包括复制粘贴在一个单元格的内容值,如果该单元格包含一定的公式。
请在下面找到该宏的摘录。
Option Explicit
Sub copyPasteValue()
Dim cellContent As String
Dim endRow As Integer
Dim endCol As Integer
Dim r As Integer
Dim c As Integer
Dim activeCellColumn As Integer
Dim activeCellRow As Integer
activeCellColumn = ActiveCell.Column
activeCellRow = ActiveCell.Row
endRow = Cells(Rows.Count, activeCellColumn).End(xlUp).Row
endCol = Cells(activeCellRow, Columns.Count).End(xlToLeft).Column
For c = activeCellColumn To endCol
For r = activeCellRow To endRow
cellContent = Cells(r, c).Formula
If InStr(1, cellContent, "GetCtData") Then
Cells(r, c).Copy
Cells(r, c).PasteSpecial Paste:=xlPasteValues
End If
Next
Next
Cells(activeCellRow, activeCellColumn).Select
If ActiveWorkbook.Name = "VALUE.xlsx" Then
ActiveWorkbook.Save
Else
ActiveWorkbook.SaveAs Filename:="VALUE"
End If
End Sub
宏非常慢,对于某些工作,每张工作表可能需要多达1个多小时。有人知道如何提高速度吗?
预先感谢你的帮助。
3条答案
按热度按时间v1l68za41#
我建议使用
Find
函数,以便Excel查找公式,而不是循环遍历所有单元格(这很耗时):它看起来可能有点奇怪,但是
hit.Value = hit.Value
用它的实际值替换了公式。fbcarpbf2#
循环查找“GetCtData”听起来不可避免,但您应该避免剪贴板
例如,使用以下代码代替两行“...Copy”和“...PasteSpecial用途:
...用单元格自己的值覆盖单元格
您还可以删除在变量'cellContent'中存储公式的行,这样底部代码块就可以重写如下:
绕过剪贴板将保存相当多的时间,也是更少的bug(值得一读的避免剪贴板作为一个一般规则)
v8wbuo2f3#
公式到值