這應該適用於所有公式引用位於同一張紙上的簡單情況。我使用DirectPrecedents
範圍,但這限制了您在同一工作表上的先前單元格。
在我的例子我有,這Sheet1
| A |
--+---------------------------------------------+
1 | 2 |
2 | 4 |
3 | 6 |
4 | =Sheet1!A3+(A1^Sheet1!A1)+Sheet1!A2/(A3+A2) |
5 | =SUM(A1,A2,A3)/COUNT(A1,A2,A3) |
注意單元格引用,其中包括與命名錶前綴單元的組合。
而且我用這個VBA代碼:
Option Explicit
Sub Test()
PrintResolvedFormula Range("A4")
PrintResolvedFormula Range("A5")
End Sub
Sub PrintResolvedFormula(rng As Range)
If rng.HasFormula Then
Dim formula As String
formula = rng.FormulaR1C1
Dim cel As Range
For Each cel In rng.DirectPrecedents.Cells
formula = Replace(formula, cel.Worksheet.Name & "!", vbNullString)
formula = Replace(formula, cel.Address(False, False, xlR1C1, False, rng), cel.Text)
Next cel
Debug.Print formula
Else
Debug.Print rng.Value
End If
End Sub
並獲得此輸出:
=6+(2^2)+4/(6+4)
=SUM(2,4,6)/COUNT(2,4,6)
注意,是解析爲值單元格引用,但它不能解決功能值。要解決個別功能,您需要分解函數字符串並使用Application.Evaluate
。
[正則表達式] R1C1單元地址超出[Range.FormulaR1C1屬性](https://msdn.microsoft.com/en-us/library/bb213527.aspx)。 – Jeeped