엑셀(Excel) VBA – Application.Evaluate 함수 이용해서 수식문자열계산하기 |
환경 : Microsoft Excel 2010 |
Application.Evaluate 함수를 이용해서 문자와 수식이 섞여 있을 때 코드에서 숫자와 연산자만 추출한후 대입하면 연산을 할 수가 있습니다. 만약 문자열로 된 수식에 문자가 없다면 바로 대입해서 결과값을 얻을 수도 있습니다.
▼ 아래와 같이 수확량란에 박스와 kg 이라는 문자열이 있지만 이것을 제외하고 숫자와 수식만 분리해서 계산을 할수 있습니다.
▼ 총수확량을 계산할려면 kg 과 박스라는 글자를 없애면 됩니다. 이런 과정을 소스화 한 것입니다. 그리고 마지막에 Application.Evaluate 함수를 사용해 계산을 하면 됩니다. 일단 Const oper As String = "-+*/()^.%" 로 연산자 종류를 담습니다. 그리고 문자열을 하나씩 쪼개서 For 문을 돌게 되는데 두가지 경우를 판단합니다. 문자가 숫자인지? 아니면 위에서 저장한 연산자에 해당하는지 말이죠. 그 외에 글자는 스킵합니다.
그렇게 해서 strResult 에 계산할수 있는 수식을 만들어 하나씩 저장하는 것이죠. 그러니까 40 * 40 이런식으로 저장이 되는 것이죠.
Const oper As String = "-+*/()^.%" '' 연산자의 종류 strCal = cell.Value
For i = 1 To Len(strCal) strTemp = Mid(strCal, i, 1) If strTemp >= "0" And strTemp <= "9" Then strResult = strResult & strTemp ElseIf InStr(1, oper, strTemp) <> 0 Then strResult = strResult & strTemp End If Next |
▼ strResult 저장한후 장한후 Application.Evaluate 함수의 인수로 넘기면 됩니다. 그리고 그 결과값을 리턴합니다. 이 예제에서 알수있듯이 문자열에 숫자와 연산자만 있다면 바로 Application.Evaluate 에 넘겨도 됩니다.
StringCalculate = Application.Evaluate(strResult) |
함수를 만든후 적용을 위해 사용자정의 에서 찾아 적용합니다.
▼ 아래는 함수를 적용한 결과입니다.
댓글을 달아 주세요