VBA除以1000而不删除公式

Tho*_*mas 3 excel vba excel-vba

我目前正在使用此基本代码将单元格的值除以1000:

Sub Divide_by_1000()
    Dim cell As Range
    For Each cell In Selection
        cell = cell / 1000
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

虽然它对于硬编码数字非常有效,但如果在具有公式的单元格中使用,它会删除公式并输出一个数字.

理想情况下,我希望宏能够像其中包含数字的单元格一样工作,但是对于具有公式的单元格,我希望它包围当前公式的括号并/1000在最后放置(即保留公式)完整)

我相信需要进行测试以检查单元格中是否首先包含公式并且如果不存在则应用我已经拥有的代码以及上面列出的代码(如果有).

任何帮助将非常感激.

Pᴇʜ*_*Pᴇʜ 5

您可以通过检查第一个字符是否为等号来检查单元格是否具有公式 =

If Left$(cell.Formula, 1) = "=" Then
Run Code Online (Sandbox Code Playgroud)

甚至更好

If cell.HasFormula Then
Run Code Online (Sandbox Code Playgroud)

然后重写扩展的公式 ( … )/1000

cell.Formula = "=(" & Right$(cell.Formula, Len(cell.Formula) - 1) & ")/1000"
Run Code Online (Sandbox Code Playgroud)

我还建议cell.Value在除以1000之前检查是否为数字

ElseIf IsNumeric(cell.Value) Then
   cell.Value = cell.Value / 1000
Run Code Online (Sandbox Code Playgroud)

所以你最终得到类似的东西

If Left$(cell.Formula, 1) = "=" Then
    cell.Formula = "=(" & Right$(cell.Formula, Len(cell.Formula) - 1) & ")/1000"
ElseIf IsNumeric(cell.Value) Then
    cell.Value = cell.Value / 1000
End If
Run Code Online (Sandbox Code Playgroud)

请注意,虽然这适用于普通公式,但它会破坏例如数组公式.