:vba에서 실제 값으로 수식을 얻는 방법은 무엇입니까?
는 다음과 같은 문제 제발 도와주세요 제가 엑셀에 vba 코드를 쓰고 있어요 나는 새로운 해요 :
- 내가
=B1*C1*D1
- 세포
B1
의 세포A1
에서 수식을 가지고,C1
및D1
내가 문자열로 공식을 얻으려면 각각의 (예 : 3,2,1) 값
이 - 즉 =3*2*1
- VBA
:vba에서 실제 값으로 수식을 얻는 방법은 무엇입니까?
는 다음과 같은 문제 제발 도와주세요 제가 엑셀에 vba 코드를 쓰고 있어요 나는 새로운 해요 :
=B1*C1*D1
B1
의 세포 A1
에서 수식을 가지고, C1
및 D1
내가 문자열로 공식을 얻으려면 각각의 (예 : 3,2,1) 값이 - 즉 =3*2*1
- VBA
당신은 모든 비 수학 연산자 부분을 구문 분석
Evaluate
이 모든 문자열 섹션그것은 아마도 복잡한 문자열을 finessing해야하지만 그
은 더 복잡한에 대한 업데이트 좋은 시작은
코드
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
하드 코드 된'* '을 좋아하지 않아 –
나는 당신의 요점을 이해합니다. 요구 사항이 좀 더 일반적인 경우 (예 :''''''''''''/''등을 처리 할 수있는 경우), 내 솔루션은 그것을 잘라 내지 않을 것입니다. –
아이디어가 대체하는 것입니다 일치 '값에 의해 .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&"*"&d1
같은 새로운 공식을 만들어 문자열 A1 지하 1 층 C1에게
을 찾는
a1의 값을 얻는다.
나쁘지 않습니까? :)
을 수정하려고하면 VBA를 사용하고 싶다고 생각 했습니까? 적어도 그것은 당신이 처음에 요구 한 것입니다.또한 이것은 하드 코딩 된'*'을 가지고 있으므로 실제 수식이'+'등을 사용한다면 작동하지 않을 것입니다 –
코드를 게시하십시오. –
나는 당신이 필요로 여기에 찾을 수 있다고 생각 : [link] (http://stackoverflow.com/questions/11579748/display-values-in-cell-formula-instead-of-references-alternatively-create-a-co) – L42