我寫vba代碼在Excel和我是新:)如何用vba中的實際值獲得公式?
請幫我解決以下問題:
- 我在
=B1*C1*D1
- 細胞
B1
細胞A1
公式,C1
和D1
具有相應值(即3,2,1)
我想要得到的公式作爲一個字符串 - 即=3*2*1
- 使用VBA
我寫vba代碼在Excel和我是新:)如何用vba中的實際值獲得公式?
請幫我解決以下問題:
=B1*C1*D1
B1
細胞A1
公式, C1
和D1
具有相應值(即3,2,1)我想要得到的公式作爲一個字符串 - 即=3*2*1
- 使用VBA
你可以使用
Evaluate
所有這些字符串部分它可能會需要運用計謀複雜的字符串,但它是一個良好的開端
更新爲更復雜的匹配
代碼
Sub ParseEm()
Dim strIn As String
Dim strNew As String
Dim strCon As String
Dim lngCnt As Long
Dim objRegex As Object
Dim objRegMC As Object
Dim objRegM As Object
strCon = "|"
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "[^=/+/\/-/*\^]+"
.Global = True
strIn = [a1].Formula
If .test(strIn) Then
Set objRegMC = .Execute(strIn)
For Each objRegM In objRegMC
strNew = Evaluate(CStr(objRegM))
If objRegM.Length >= Len(strNew) Then
Mid$(strIn, objRegM.firstindex + 1 + lngCnt, objRegM.Length) = strNew & Application.Rept(strCon, objRegM.Length - Len(strNew))
Else
strIn = Left$(strIn, objRegM.firstindex + lngCnt) & strNew & Right$(strIn, Len(strIn) - objRegM.firstindex - objRegM.Length - lngCnt - 1)
lngCnt = lngCnt + Len(strNew) - objRegM.Length
End If
Next
strIn = Replace(strIn, strCon, vbNullString)
MsgBox strIn
Else
MsgBox "sorry, no matches"
End If
End With
End Sub
+ 1很好解釋:) –
我所知道的唯一方法是使用Precedents
功能:
Sub GetFormulaAsString()
Dim var As Range, temp As String, formulaAsString As String
temp = "="
For Each var In Range("A1").Precedents
temp = temp & var & "*"
Next var
formulaAsString = VBA.Left$(temp, Len(temp) - 1) // "=3*2*1"
End Sub
我不喜歡硬編碼'*' – 2013-10-01 08:06:52
我明白你的觀點。如果需求是更通用的 - 比如可以處理'+'''''''''/'等等 - 那麼我的解決方案不會削減它。 –
想法是取代單元格在'.Formula'屬性中的引用。唯一的麻煩是用公式中的$符號,因此添加了cA和rA循環。
Sub GetFormulaAsString()
Dim var As Range
Dim temp As String
Dim R As Range
Dim v As Variant
Dim cA As Integer
Dim rA As Integer
Dim cellname As String
Set R = Range("A1")
temp = R.Formula
Debug.Print temp
For Each var In R.DirectPrecedents
v = var.Value
For cA = 1 To 0 Step -1
For rA = 1 To 0 Step -1
cellname = var.Address(cA, rA)
temp = Replace(temp, cellname, v)
Next rA
Next cA
Next var
Debug.Print temp
msgbox temp
End Sub
我發現了一個錯誤:如果在公式中有一個範圍。試圖修復 – 4dmonster
我已經做了的問題,僞是:
找到字符串A1 B1 C1
使得這樣="="&b1&"*"&c1&"*"&d1
新的公式在單元格A1
得到a1的值
不壞? :)
以爲你想使用VBA?至少這就是你首先要求的。此外,它有一個硬編碼的'*',所以如果實際的公式使用'+'等,它將不起作用 – 2013-12-06 11:30:34
發佈您的代碼。 –
我想你需要什麼可以在這裏找到:[鏈接](http://stackoverflow.com/questions/11579748/display-values-in-cell-formula-instead-of-references-alternatively-create-a-co ) – L42