문자열 계산하는 함수
엑셀로 예산서를 작성할때 산출내역을 적지요?
예를들어, 1,500원*5명*2학기 라구요.
이걸 B3셀에 입력했다고 치고 C3셀에 이 결과를 계산기를 두드려서 15,000 이라고 입력을 하겠지요.
그렇다면 이렇게 입력한 산출내역을 엑셀에서 자동으로 계산되게끔 할 수는 없을까요?
할 수 있습니다. 자 지금부터 따라해보세요.
준비단계로 먼저 보안설정을 바꿔줘야 합니다.
엑셀을 실행합니다.
왼쪽구석에 있는 오피스버튼을 누르고 "Excel옵션" 버튼을 눌러주세요
보안 센터 > 보안 센터 설정(T)... 를 눌러주세요
매크로 설정 > 모든 매크로 포함(위험성 있는.. 어쩌구 블라블라) 를 눌러주세요 그리고 확인버튼
그럼 원래 화면으로 돌아옵니다.
ALT+F11 을 눌러봅니다. 그럼 VBE화면이 뜹니다. 처음보는 화면이시겠지만 놀라지 마시고 천천히..
왼쪽 프로젝트 창에 VBAProject(Book1) 부분에 마우스 오른쪽클릭 > 삽입(N) > 모듈(M)을 눌러줍니다.
그럼 사용자 모듈이 삽입되면서 코드 입력창이 나오는데
그 입력창에 아래 내용을 복사해서 붙여넣기 해줍니다.
Option Explicit
'
'************************************
'이 함수는 두 개의 인수를 넘겨 받는다
'strEval : 문자열 변수로 평가하려는 식이다. 문자열 변수이다
'strDel() : 평가식에서 삭제하려는 문자열이다. 매개변수배열이다
'사용자가 평가식에서 삭제하려는 문자열을 임의로 지정해 넣으면
'평가하려는 식에서 그 문자열을 삭제한 뒤 계산한다
'예를 들어 m3, m3/G와 같은 식을 이 매개변수배열에 전달할 경우 이를 삭제한 뒤 계산한다
'
Function tt(ByVal strEval As String, ParamArray strDel() As Variant) As Double
Dim strTemp As String, strMe As String
Dim strF As String
Dim c As Variant
Dim i As Integer, j As Integer
If Len(strEval) = 0 Then '값을 입력하지 않은 경우
tt = 0: Exit Function
ElseIf IsNumeric(strEval) Then '숫자값일 경우
tt = Val(strEval): Exit Function
End If
i = Len(strEval)
strTemp = Trim(strEval)
'삭제하고자 하는 단위(m3 등을 지운다)
With Application.WorksheetFunction
For Each c In strDel
strTemp = .Substitute(strTemp, CStr(c), "")
Next c
End With
'순환하기 위해 글자 수를 헤아려 둔 뒤
i = Len(strTemp)
'마지막까지 순환하여
For j = 1 To i
strF = Mid(strTemp, j, 1)
If IsNumeric(strF) Then
Else
Select Case strF '숫자가 아닌 경우에
'계산식에 사용되는 문자라면 남겨두고
Case "*", "/", ".", "+", "-", "%", "^", "(", ")"
'곱하기 더하기 나누기 빼기 기호는 변환한다
Case "×"
strF = "*"
Case "÷"
strF = "/"
Case "+"
strF = "+"
Case "-"
strF = "-"
Case "%"
strF = "*0.1"
Case Else '나머지 문자열은 모두 삭제한다
strF = ""
End Select
End If
'임시 문자열을 만들어
strMe = strMe & strF
Next j
'이를 Evaluate 함수를 이용해 평가한 뒤 반환한다
tt = Application.Evaluate(strMe)
End Function
VBE입력화면의 파일(F) > 닫거 Microsoft Excel(으)로 돌아가기(C) 를 눌러줍니다.
자, 이제 테스트를 해봅시다.
B3셀에 1,500원 * 5명 * 2학기를 입력하시고 C3셀에 =tt(B3) 라고 입력해봅니다.
짠, 계산이 되는걸 보실 수 있을겁니다.
예산은 천원 단위로만 입력되기에 roundup 함수를 이용해 백원단위에서 절상을 해주시면 좋습니다.
위 그림처럼 칸을 따로 나누기 싫으시면 =ROUNDUP(tt(B3),-3) 이라고 C3셀에 입력하시면 되겠지요
저장은 다른이름으로 저장 > Excel 97-2003 통합문서(9)로 해주시면 됩니다.
이 방법으로 작업한 문서가 다른 컴퓨터에서 열리지 않을때는
맨위의 보안설정을 다시 해주시면 됩니다.
끄읏-