엑셀 숫자만 추출하는 함수 :: ExtractNumber 함수 사용법 총정리
엑셀 숫자 추출 함수, 목차 바로가기
함수 구문
= ExtractNumber ( 텍스트, [시작지점], [종료지점] )
엑셀 함수만 사용하는 방법은 아래 포스트에 정리해드렸습니다.
인수 설명
인수 | 설명 |
텍스트 | 숫자를 추출할 값이 적힌 셀 또는 문자열입니다. |
시작지점 [선택인수] |
문자열에서 숫자를 추출할 시작 위치입니다. 기본값은 1 입니다. 예를들어 '5' 를 입력할 경우, 문자열의 5번째 글자부터 숫자 추출을 시작합니다. |
종료지점 [선택인수] |
숫자 추출을 종료할 위치입니다. 기본값은 32,767 입니다. 예를들어 '10'을 입력할 경우, 문자열의 10번째 글자까지만 참조하여 숫자를 추출합니다. |
함수 사용예제
- = ExtractNumber ( "ABC123Z" )
'// '123' 을 반환합니다. - = ExtractNumber ( "1AD34-515", 7 )
'// '515' 를 반환합니다. - = ExtractNumber ( "1세대-아이폰3S-블랙X13", 4, 8)
'// '3' 을 반환합니다.
설명
ExtractNumber 함수는 VBA 매크로를 활용한 숫자 추출 사용자지정함수입니다. 매크로 사용이 어려울 경우 아래 엑셀 숫자만 추출하기 함수 공식을 활용해보세요.
ExtractNumber 함수는 지정한 셀 또는 문자열에서 숫자를 추출하는 엑셀 숫자 추출 함수입니다. 문자열의 추출 시작위치 및 종료위치를 지정하여 지정한 위치 안 에서만 숫자를 추출할 수도 있습니다.

그 외 참고사항
- 기존 문자열에 줄바꿈이 포함되어 있을 경우, 줄바꿈은 무시되고 하나의 줄에 숫자가 추출됩니다.
- 숫자추출 종료위치가 시작위치보다 작을 경우, 함수는 #Value! 오류를 반환합니다.
- 시작지점 또는 종료지점 값이 '숫자'가 아닐 경우, 기본값으로 설정됩니다. 숫자추출 시작위치의 기본값은 1, 종료위치 기본값은 32,767 (최대 문자길이) 입니다.
- 시작지점 또는 종료지점으로 0보다 작은 값이 입력될 경우, 기본값으로 설정됩니다.
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [엑셀VBA함수] ExtractNumber :: 숫자 추출 함수예제파일
엑셀 숫자 추출, ExtractNumber함수의 동작원리
ExtactNumber 함수 전체 명령문
'############################################################### '오빠두엑셀 VBA 사용자지정함수 ([https://www.oppadu.com](https://www.oppadu.com/)) '■ ExtractNumber 함수 '■ 텍스트에서 숫자만 추출합니다. 추출 시작 및 종료위치를 지정할 수 있습니다. '■ 인수 설명 '_____________Val : 숫자만 추출할 텍스트 또는 셀입니다. '__________iStart : 추출을 시작할 위치입니다. 기본값은 1 입니다. '___________iEndl : 추출을 종료할 위치입니다. 기본값은 32767 입니다. '############################################################### Function ExtractNumber(Val, Optional iStart, Optional iEnd) As String Dim i As Long Dim Str As String Dim match As Variant If IsMissing(iStart) Then iStart = 0 If IsMissing(iEnd) Then iEnd = 32767 If iEnd <= 0 Or Not IsNumeric(iEnd) Then iEnd = 32767 If iStart <= 0 Or Not IsNumeric(iStart) Then iStart = 1 If iStart > iEnd Then ExtractNumber = CVErr(errvalue) If IsObject(Val) Then Str = Val.Value Else Str = Val Str = Mid(Str, iStart, iEnd - iStart + 1) With CreateObject("VBScript.RegExp") .Pattern = "\d+" .Global = True Set match = .Execute(Str) If match.Count > 0 Then ExtractNumber = "" For i = 0 To match.Count - 1 ExtractNumber = ExtractNumber & match(i) Next i End If End With End Function
명령문 동작원리 단계별 알아보기
- 오류 발생 방지를 위하여 예상되는 상황에 대한 오류처리 문구를 추가합니다.
If IsMissing(iStart) Then iStart = 0 If IsMissing(iEnd) Then iEnd = 32767 If iEnd <= 0 Or Not IsNumeric(iEnd) Then iEnd = 32767 If iStart <= 0 Or Not IsNumeric(iStart) Then iStart = 1 If iStart > iEnd Then ExtractNumber = CVErr(errvalue) If IsObject(Val) Then Str = Val.Value Else Str = Val
- 시작위치, 종료위치에 따라 숫자추출 대상 문자열을 설정합니다.
Str = Mid(Str, iStart, iEnd - iStart + 1)
- Regex (정규표현식)을 사용하여 문자열에서 숫자를 추출합니다.
With CreateObject("VBScript.RegExp") .Pattern = "\d+" .Global = True Set match = .Execute(Str) End With
- 추출된 숫자를 ExtractNumber 함수로 반환한 후, 숫자 추출 명령문을 종료합니다.
If match.Count > 0 Then ExtractNumber = "" For i = 0 To match.Count - 1 ExtractNumber = ExtractNumber & match(i) Next i End If
자주묻는질문
질문1. 소숫점(.)이 포함된 숫자를 추출하고 싶습니다.
소숫점을 포함한 숫자를 추출하고 싶을 경우, 명령문을 아래와 같이 변경합니다. (예: 갤럭시폴더 1.2버전 -> 1.2)
'############################################################### '오빠두엑셀 VBA 사용자지정함수 ([https://www.oppadu.com](https://www.oppadu.com/)) '■ ExtractNumber 함수 '■ 텍스트에서 숫자만 추출합니다. 추출 시작 및 종료위치를 지정할 수 있습니다. '■ 인수 설명 '_____________Val : 숫자만 추출할 텍스트 또는 셀입니다. '__________iStart : 추출을 시작할 위치입니다. 기본값은 1 입니다. '___________iEndl : 추출을 종료할 위치입니다. 기본값은 32767 입니다. '############################################################### Function ExtractNumber(Val, Optional iStart, Optional iEnd) As String Dim i As Long Dim Str As String Dim match As Variant If IsMissing(iStart) Then iStart = 0 If IsMissing(iEnd) Then iEnd = 32767 If iEnd <= 0 Or Not IsNumeric(iEnd) Then iEnd = 32767 If iStart <= 0 Or Not IsNumeric(iStart) Then iStart = 1 If iStart > iEnd Then ExtractNumber = CVErr(errvalue) If IsObject(Val) Then Str = Val.Value Else Str = Val Str = Mid(Str, iStart, iEnd - iStart + 1) With CreateObject("VBScript.RegExp") ' 소숫점을 포함한 숫자를 추출합니다. .Pattern = "(\d+)(?:\.(\d{1,2}))?" .Global = True Set match = .Execute(Str) If match.Count > 0 Then ExtractNumber = "" For i = 0 To match.Count - 1 ExtractNumber = ExtractNumber & match(i) Next i End If End With End Function
- 오류 발생 방지를 위하여 예상되는 상황에 대한 오류처리 문구를 추가합니다.