我正在使用公式在另一个单元格中显示单元格公式。显示单元格的公式,但是数值不是引用
我想在此公式中显示每个引用的值,而不是引用。
例:
= $ R $ 16 + R19 *($ T $ 15- $ R $ 16)
希望它是
= 3 + 2 *(4-2)
功能我现在使用的显示公式,因为它是
Function GetFormula(Cell As Range) As String
GetFormula = Cell.Formula
End Function
我正在使用公式在另一个单元格中显示单元格公式。显示单元格的公式,但是数值不是引用
我想在此公式中显示每个引用的值,而不是引用。
例:
= $ R $ 16 + R19 *($ T $ 15- $ R $ 16)
希望它是
= 3 + 2 *(4-2)
功能我现在使用的显示公式,因为它是
Function GetFormula(Cell As Range) As String
GetFormula = Cell.Formula
End Function
这里是一个可以处理情况下,像
=B1+C1-D1/E1
=$B$1+C1*($B$1-$D$1)
=B1+C1-(D1/E1)
=B1+C1-(D1/E1)
=$B$1*C1*($B$1/$D$1)
假设一个很简单的例子:
示例工作
代码:
Sub Sample()
Dim i As Long
For i = 1 To 5
Debug.Print ConvertToValues(Range("A" & i))
Next i
End Sub
Function ConvertToValues(rng As Range)
Dim sTmp As String, sOpr As String, sOrig As String
Dim s As String, v As String
Dim MyAr
Dim i As Long
sOpr = "+,/,-,*,&,(,),{,},[,]"
MyAr = Split(sOpr, ",")
sTmp = Replace(rng.Formula, "$", "")
sOrig = sTmp
For i = LBound(MyAr) To UBound(MyAr)
sTmp = Replace(sTmp, MyAr(i), "SIDROUT")
Next i
MyAr = Split(sTmp, "SIDROUT")
For i = LBound(MyAr) To UBound(MyAr)
s = MyAr(i)
If Len(Trim(s)) <> 0 Then
v = Range(s).Value
sOrig = Replace(sOrig, s, v)
End If
Next i
If sOrig <> "" Then _
ConvertToValues = "=" & sOrig
End Function
输出
注意:
让我知道,如果上面的代码在特定的情况下失败,我会更新的代码。
不知道如何做到这一点,但只是想澄清一下,你将如何处理诸如1个单元或volatile函数的范围问题? – gtwebb
该公式是否仅包含来自同一工作表的单个单元格引用? –
是的,范围可能会让它很难,但说它只是单细胞参考。 –