엑셀(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) |
함수를 만든후 적용을 위해 사용자정의 에서 찾아 적용합니다.
▼ 아래는 함수를 적용한 결과입니다.
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 Excel UserForm 에 멀티 페이지 구현을 위해 탭 추가하는 방법 (0) | 2017.09.26 |
---|---|
엑셀(Excel) VBA – Application.Version 개체로 엑셀 버전과 사용언어 알아보기 (0) | 2014.12.29 |
엑셀(Excel) VBA – 셀에 적용된 같은 배경색 데이터 합산하기 (7) | 2014.12.28 |
엑셀(Excel) VBA – 문자열에서 숫자, 대문자, 소문자, 한글추출하기 (5) | 2014.12.24 |
엑셀(Excel) VBA – 수식을 문자열로 바꾸는 사용자정의 함수 만들기 (0) | 2014.12.22 |
엑셀(Excel) VBA – Application.Volatile 함수로 사용자정의함수 재구동 (2) | 2014.12.21 |
엑셀(Excel) VBA – 선택한 셀시트명, 파일명, 위치를 알아오는 사용자정의함수 (0) | 2014.12.20 |
엑셀(Excel) VBA – 사용자정의 함수 세부내용 VB 코드로 등록하기 (1) | 2014.12.19 |