これは、すべての数式参照が同じシート上にある単純な状況で有効です。私は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
を使用します。
[regex] R1C1セルは[Range.FormulaR1C1プロパティ](https://msdn.microsoft.com/en-us/library/bb213527.aspx)からアドレス指定します。 – Jeeped