2013-12-12 49 views
1

我正在使用公式在另一個單元格中顯示單元格公式。顯示單元格的公式,但是數值不是引用

我想在此公式中顯示每個引用的值,而不是引用。

例:

= $ R $ 16 + R19 *($ T $ 15- $ R $ 16)

希望它是

= 3 + 2 *(4-2)

功能我現在使用的顯示公式,因爲它是

Function GetFormula(Cell As Range) As String 
    GetFormula = Cell.Formula 
End Function 
+0

不知道如何做到這一點,但只是想澄清一下,你將如何處理諸如1個單元或volatile函數的範圍問題? – gtwebb

+0

該公式是否僅包含來自同一工作表的單個單元格引用? –

+0

是的,範圍可能會讓它很難,但說它只是單細胞參考。 –

回答

2

這裏是一個可以處理情況下,像

=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) 

假設一個很簡單的例子:

  1. 比方說,以上公式在單元格A1到A5中
  2. 所有單元格都在同一個工作表中
  3. 沒有SUM,Vlookup等工作表函數
  4. 沒有錯誤處理完成。假設你會照顧它

示例工作

enter image description here

代碼

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 

輸出

enter image description here

注意

讓我知道,如果上面的代碼在特定的情況下失敗,我會更新的代碼。

+0

不錯!在RL中,「SIDROUT」將是我的代碼中的一個變量或常量。 – Juliusz

+0

'SIDROUT'在這裏是一個分隔符。 –

+0

我知道。這就是爲什麼我會有一個名爲「tempDelimiter」的變種。兩個原因:不言自明的代碼,不太容易出現錯字錯誤。 – Juliusz

相關問題