ไม่ใช่วิธี VBA:
ตั้งชื่อช่วงตามรายการของพวกเขา
ดังนั้น C2 จะเป็นx
C3 จะเป็นy
และ ...
เมื่อต้องการทำสิ่งนี้อย่างรวดเร็ว:
ไฮไลต์ B2: C4
บนแท็บสูตรคลิก Create from Selection
เลือกLeft
จากนั้นกดตกลง
นี่จะตั้งชื่อเซลล์ที่เน้นสีในคอลัมน์ C x, y, z ตามลำดับ
ดังนั้นสูตรของคุณใน C6 จะเป็น:
=x*y*1000/z
จากนั้นใน C8:
=FORMULATEXT(C6)
หากไม่สามารถใช้งานได้ UDF ต่อไปนี้จะทำสิ่งที่คุณต้องการ:
Function Foo(rng As Range) As String
Dim MathArr()
'Add to this array as needed to find all the math functions
MathArr = Array("*", "-", "+", "/", "(", ")")
Dim strArr() As String
Dim temp As String
Dim strFormula As String
Dim i As Long
'Hold two versions of the formula, one manipulate and the other to use.
strFormula = rng.Formula
temp = rng.Formula
'Replace all math functions with space
For i = LBound(MathArr) To UBound(MathArr)
strFormula = Replace(strFormula, MathArr(i), " ")
Next i
'Split on the space
strArr = Split(strFormula)
'iterate and test each part if range
For i = LBound(strArr) To UBound(strArr)
If test1(strArr(i)) Then
'If range then we repace that with the value to the right of that range
temp = Replace(temp, strArr(i), Range(strArr(i)).Offset(, -1).Value)
End If
Next i
'Return text
Foo = "=" & temp
End Function
Function test1(reference As String) As Boolean
Dim v As Range
' if the string is not a valid range it will throw and error
On Error Resume Next
Set v = Range(reference) 'try to use referenced range, is address valid?
If Err.Number > 0 Then
Exit Function 'return false
End If
On Error GoTo 0
test1 = True
End Function
หากไม่มีช่วงที่ถูกตั้งชื่อดังนั้นสูตรใน C6 คือ=C2*C3*1000/C4
ฉันใส่นี่ใน C8:
=Foo(C6)