안녕하세요.

 

문서를 작성하다 보면 하나의 셀에 텍스트와 수식을 섞어 입력하고, 이것을 계산해야 하는 경우가 있습니다.

 

 

실습 파일 다운로드

세출예산.xlsx
0.01MB
CalStr.txt
0.00MB

 

G열에 계산할 숫자와 연산자, 그리고 단위를 나타내는 텍스트가 같이 한 셀에 들어 있습니다.

 

계산할 셀이 많지 않고, 산출식 내의 값을 한 번 작성한 뒤 바꾸지 않는다면 복잡하게 사용자 정의 함수를 이용하지 않고 수동으로 계산식을 만드는 것이 더 합리적인 선택입니다.

계산할 셀이 많고, 작성한 산출식의 값을 적당히 수정해서 최적의 값을 찾는 작업을 해야 한다면 값을 바꿀 때마다 바로 수정되도록 사용자 정의 함수를 만들어 써야 합니다.

 

셀 내용에서 계산에 필요한 숫자와 연산자만 걸러서 수식을 완성하고 결과를 반환하는 사용자 정의 함수 CalStr 입니다.

Function CalStr(strInput As String)
    Dim i As Integer
    Dim Temp As String, strText As String
    
    On Error Resume Next
    
    Temp = ""
    
    For i = 1 To Len(strInput) + 1
        strText = Mid(strInput, i, 1)
    
        If strText Like "[0-9+*/.%()-]" Then
            Temp = Temp & strText
        End If
    Next i
    
    If Temp = "" Then
        CalStr = 0
    Else
        CalStr = Application.Evaluate(Temp)
    End If
End Function

 

사용자 정의 함수를 엑셀 파일에 적용하려면 첨부된 파일을 다운로드해서 텍스트 편집기로 엽니다.

<Ctrl + A>를 눌러 전체 선택하고, <Ctrl + C>를 눌러 복사합니다.

 

엑셀 파일을 열거나 이미 열려 있다면 선택해서 활성화하고 <Alt + F11>을 눌러 VB 편집기(VBE)를 실행합니다.

[삽입]-[모듈]을 선택하거나 <Alt, I, M>을 눌러 모듈을 추가합니다.

<Ctrl + V>를 눌러 붙여넣기 합니다.

 

<Alt + Q>를 눌러 VBE를 닫고 엑셀 창으로 돌아가거나 <Alt + F11>을 눌러 엑셀 창으로 전환을 합니다.

 

[H3] 셀에 커서를 두고 =c를 입력하면 사용자 정의 함수 CalStr이 목록에 표시됩니다.

수식을 작성합니다.

적용할 다른 셀에 채우기해서 결과를 구합니다.

완성된 파일을 저장합니다.

 

파일 형식을 Excel 매크로 사용 통합 문서(*.xlsm)로 지정하지 않으면 경고 메시지가 표시됩니다.

사용자 정의 함수로 원하는 결과를 이미 구했기 때문에 굳이 사용자 정의 함수를 다시 쓸 수 있도록 매크로가 포함된 파일 형식으로 저장할 필요가 없습니다.

 

그냥 Excel 통합 문서(*.xlsx)로 저장합니다.

매크로를 제외한 파일로 저장해도 사용자 정의 함수로 구한 결과는 오류 없이 그대로 표시됩니다.

수식을 수정하거나 산출식 셀의 내용을 바꾸면 사용자 정의 함수 CalStr을 이해할 수 없기 때문에 #NAME? 오류 메시지가 표시됩니다.

이 때는 앞에서 소개한 방법대로 사용자 정의 함수를 복사해서 VBE에 붙여넣기 하면 다시 제대로 동작합니다.

 

필요하신 분께 도움이 되길 바랍니다.

반응형

+ Recent posts