Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

엑셀(Excel) VBA – Application.Evaluate 함수 이용해서 수식문자열계산하기

 

환경 : Microsoft Excel 2010

 

Application.Evaluate 함수를 이용해서 문자와 수식이 섞여 있을 때 코드에서 숫자와 연산자만 추출한후 대입하면 연산을 할 수가 있습니다. 만약 문자열로 된 수식에 문자가 없다면 바로 대입해서 결과값을 얻을 수도 있습니다.

 

아래와 같이 수확량란에 박스와 kg 이라는 문자열이 있지만 이것을 제외하고 숫자와 수식만 분리해서 계산을 할수 있습니다.

 

엑셀(Excel) VBA – Application.Evaluate 함수 이용해서 수식문자열계산하기

 

총수확량을 계산할려면 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 – Application.Evaluate 함수 이용해서 수식문자열계산하기

 

 

아래는 함수를 적용한 결과입니다.

엑셀(Excel) VBA – Application.Evaluate 함수 이용해서 수식문자열계산하기

 

반응형
Posted by 녹두장군

댓글을 달아 주세요

  1. 윤용일 2016.06.03 17:41  댓글주소  수정/삭제  댓글쓰기

    엑셀에서 비쥬얼 베이직창 열고 모듈을 삽입한 후 모듈에 위의
    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

    StringCalculate = Application.Evaluate(strResult)

    이렇게 작성하면 되는 것인지요! 제가 VB는 잘모르는 분야라서!!!요