엑셀 숫자만 추출하는 함수 :: ExtractNumber 사용법 및 전체 코드

셀 안의 텍스트에서 숫자만 추출하는 ExtractNumber 함수의 사용법 및 전체 명령문 동작원리를 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2022. 05. 04. 18:59
URL 복사
메모 남기기 : (14)

엑셀 숫자만 추출하는 함수 :: 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
명령문 동작원리 단계별 알아보기
  1. 오류 발생 방지를 위하여 예상되는 상황에 대한 오류처리 문구를 추가합니다.
    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
  2. 시작위치, 종료위치에 따라 숫자추출 대상 문자열을 설정합니다.
    Str = Mid(Str, iStart, iEnd - iStart + 1)
  3. Regex (정규표현식)을 사용하여 문자열에서 숫자를 추출합니다.
    With CreateObject("VBScript.RegExp")
        .Pattern = "\d+"
        .Global = True
        Set match = .Execute(Str)
    End With
  4. 추출된 숫자를 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
4.9 10 투표
게시글평점
14 댓글
Inline Feedbacks
모든 댓글 보기
14
0
여러분의 생각을 댓글로 남겨주세요.x