목차
수식과 추출 도구를 사용하여 Excel의 다양한 텍스트 문자열에서 숫자를 추출하는 방법을 보여줍니다.
주어진 길이의 텍스트 문자열의 일부를 추출할 때 , Excel은 작업을 신속하게 처리할 수 있도록 세 가지 하위 문자열 함수(Left, Right 및 Mid)를 제공합니다. 영숫자 문자열에서 숫자를 추출할 때 Microsoft Excel은… 서로 중첩됩니다. 또는 추출 도구를 실행하고 마우스 클릭으로 작업을 완료할 수 있습니다. 아래에서 두 가지 방법에 대한 자세한 내용을 확인할 수 있습니다.
텍스트 문자열 끝에서 숫자를 추출하는 방법
숫자가 뒤에 오는 영숫자 문자열 열이 있는 경우 텍스트, 다음 수식을 사용하여 가져올 수 있습니다.
RIGHT( cell, LEN( cell) - MAX(IF(ISNUMBER(MID( cell, ROW(INDIRECT("1:"&LEN( 셀))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( 셀))), 0)))공식의 논리에 대해서는 잠시 후에 다루겠습니다. 지금은 단순히 cell 을 원래 문자열을 포함하는 셀에 대한 참조(여기서는 A2)로 바꾸고 같은 행의 빈 셀에 수식을 입력합니다(예: B2:
<). 0> =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))
이 수식은 끝에서부터만 숫자를 가져옵니다. 문자열의 시작 부분이나 중간 부분에도 숫자가 있는 경우무시됨:
텍스트 함수의 범주에 속하는 RIGHT 함수로 추출을 수행합니다. 이 함수의 출력은 항상 text 입니다. 우리의 경우 결과는 숫자 하위 문자열 이며 Excel에서는 숫자가 아닌 텍스트이기도 합니다.
결과가 숫자 여야 하는 경우 (추가 계산에 사용할 수 있음) 수식을 VALUE 함수로 래핑하거나 결과를 변경하지 않는 산술 연산(예: 1을 곱하거나 0을 더함)을 수행합니다. 단일 숫자인 경우 IFERROR 함수를 사용하십시오. 예:
=IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")
또는
=IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))) +0, "")
참고. Dynamic Array Excel(Office 365 및 2021)에서는 Enter 키를 사용하여 일반적인 방식으로 수식을 입력합니다. Excel 2019 및 이전 버전에서는 배열 수식으로만 작동하므로 Ctrl + Shift + Enter를 눌러 완료해야 합니다.
이 수식이 작동하는 방식:
영숫자 문자열에서 숫자를 추출하려면 먼저 추출을 시작할 위치를 알아야 합니다. 문자열에서 숫자가 아닌 마지막 문자의 위치는 다음과 같은 까다로운 공식을 사용하여 결정됩니다.
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN( A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))
논리를 이해하기 위해 내부에서 조사해 봅시다. :
ROW(INDIRECT("1:"&LEN(A2))) 조합소스 문자열(A2)의 총 문자에 해당하는 일련 번호를 생성하고 이러한 일련 번호를 MID에 시작 번호로 제공합니다.
MID(A2, {1;2;3;4 ;5;6;7;8}, 1)
MID 함수는 A2에서 각 개별 문자를 가져와 배열로 반환합니다.
{"0";"5";" -";"E";"C";"-";"0";"1"}
MID는 텍스트 함수이므로 출력은 항상 텍스트입니다. 따옴표로 묶여 있습니다.) 숫자를 숫자로 바꾸려면 배열에 1을 곱합니다(이중 부정 --MID()는 동일한 효과를 가집니다). 이 연산의 결과는 숫자 배열과 #VALUE! 숫자가 아닌 문자를 나타내는 오류:
ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})
ISNUMBER 함수 배열의 각 요소를 평가하고 부울 값의 형태로 판정을 내립니다. - 숫자의 경우 TRUE, 그 외의 경우 FALSE:
{TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}
이 배열은 IF 함수의 논리적 테스트로 이동합니다. 여기서 배열의 각 요소는 FALSE:
IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE와 비교됩니다. ;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)
각 FALSE(숫자가 아닌 값)에 대해 다른 ROW(INDIRECT()) 함수는 다음을 반환합니다. 문자열에서 상대 위치. 각 TRUE(숫자 값)에 대해 0이 반환됩니다. 결과 배열은 다음과 같습니다.다음과 같습니다.
{0;0;3;4;5;6;0;0}
나머지는 쉽습니다. MAX 함수는 문자열에서 숫자가 아닌 마지막 값의 위치인 위의 배열에서 가장 높은 숫자를 찾습니다(이 경우 6). 간단히 LEN이 반환한 문자열의 총 길이에서 해당 위치를 빼고 그 결과를 RIGHT에 전달하여 문자열의 오른쪽에서 추출할 문자 수를 알려줍니다.
RIGHT(A2, LEN (A2) - 6)
완료!
텍스트 문자열의 시작 부분에서 숫자를 추출하는 방법
숫자 다음에 텍스트가 나타나는 레코드로 작업하는 경우 다음을 수행할 수 있습니다. 일반 수식
LEFT( cell, MATCH(FALSE, ISNUMBER(MID( cell, ROW(INDIRECT("1: "&LEN( cell)+1)), 1) *1), 0) -1)A2의 원래 문자열을 사용하여 다음 수식을 사용하여 숫자를 가져옵니다.
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)
가운데나 끝에 있는 숫자가 몇 개인지 상관없이 시작 번호만 추출됩니다.
참고. Excel 365 및 Excel 2021에서는 동적 배열 지원으로 인해 일반 수식이 제대로 작동합니다. Excel 2019 및 이전 버전에서는 Ctrl + Shift + Enter를 눌러 명시적으로 배열 수식 으로 만들어야 합니다.
이 수식이 작동하는 방식:
여기서 다시 ROW, INDIRECT 및 LEN 함수의 조합을 사용하여 소스 문자열의 전체 문자에 1을 더한 것과 같은 일련의 숫자를 생성합니다(해당 역할은추가 문자는 나중에 명확해집니다).
ROW(INDIRECT("1:"&LEN(A2)+1))
MID 및 ISNUMBER는 이전 예 - MID는 개별 문자를 가져오고 ISNUMBER는 이를 논리 값으로 변환합니다. TRUE's 및 FALSE's의 결과 배열은 조회 배열로 MATCH 함수로 이동합니다. 3>
MATCH는 첫 번째 FALSE의 상대 위치를 계산하여 문자열에서 숫자가 아닌 첫 번째 문자의 위치를 제공합니다(A2의 3). 앞의 숫자를 추출하기 위해 첫 번째 텍스트 문자 위치에서 1을 빼고 그 차이를 LEFT 함수의 num_chars 인수에 제공합니다.
LEFT(A2, 3-1)
이제 ROW(INDIRECT()+1))에 의해 생성된 시퀀스의 "추가" 문자로 돌아갑니다. 이미 알고 있듯이 이 시퀀스는 MID 기능의 시작점을 제공합니다. +1이 없으면 MID는 원래 문자열에 있는 만큼의 문자를 정확히 추출합니다. 문자열에 숫자만 포함된 경우 ISNUMBER는 TRUE만 반환하고 MATCH는 하나 이상의 FALSE가 필요합니다. 이를 확인하기 위해 MID 함수가 빈 문자열로 변환하는 문자열의 전체 길이에 문자를 하나 더 추가합니다. 예를 들어 B7에서 MID는 다음 배열을 반환합니다.
{"1";"2";"3";"4";""}
참고. RIGHT 함수의 경우와 마찬가지로 LEFT도 숫자를 반환합니다.substring 은 기술적으로 숫자가 아니라 텍스트입니다. 숫자 문자열이 아닌 숫자로 결과를 얻으려면 VALUE 함수에 수식을 중첩하거나 첫 번째 예와 같이 결과에 1을 곱합니다.
문자열의 모든 위치에서 숫자를 얻는 방법
작업에 문자열의 모든 위치에서 숫자를 추출해야 하는 경우 MrExcel 포럼에 게시된 다음과 같은 놀라운 공식을 사용할 수 있습니다.
=SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)) * ROW(INDIRECT("1:"&LEN(A2))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)
여기서 A2는 원본 텍스트 문자열입니다.
이 수식을 분석하려면 별도의 기사가 필요하므로 워크시트에 복사하기만 하면 실제로 작동하는지 확인할 수 있습니다 :)
그러나 결과를 검토하면 한 가지 사소한 단점을 발견할 수 있습니다. 소스 문자열에 숫자가 포함되어 있지 않으면 위 스크린샷의 6행에서와 같이 수식이 0을 반환합니다. 이 문제를 해결하려면 소스 문자열에 숫자가 포함되어 있는지 확인하는 논리 테스트인 IF 문에 수식을 래핑할 수 있습니다. 그렇다면 수식은 숫자를 추출하고, 그렇지 않으면 빈 문자열을 반환합니다.
=IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")
아래 스크린샷에 표시된 것처럼 개선된 수식이 아름답게 작동합니다(Excel 전문가인 Alex에게 찬사를 보냅니다. ):
이전의 모든 예와 달리 이 수식의 결과는 숫자 입니다. 이를 확인하려면 열 B의 오른쪽 정렬 값과 잘린 선행 0을 확인하십시오.
팁. 엑셀 365에서 -Excel 2019에는 TEXTJOIN 기능을 사용하여 훨씬 간단한 솔루션이 있습니다. 텍스트를 제거하고 숫자를 유지하는 방법을 참조하세요.
Ultimate Suite를 사용하여 텍스트 문자열에서 숫자 추출
방금 본 것처럼 텍스트 문자열에서 숫자를 가져오는 사소한 Excel 공식은 없습니다. 수식을 이해하거나 데이터 세트에 맞게 조정하는 데 어려움이 있는 경우 Excel의 문자열에서 숫자를 가져오는 이 간단한 방법이 마음에 드실 것입니다.
Excel 리본에 Ultimate Suite를 추가하면 다음과 같은 방법이 있습니다. 영숫자 문자열에서 숫자를 빠르게 검색할 수 있습니다.
- Ablebits Data 탭 > 텍스트 그룹으로 이동하여 추출 을 클릭합니다. :
- 소스 문자열이 있는 모든 셀을 선택합니다.
- 추출 도구 창에서 번호 추출 라디오 버튼을 선택합니다.
- 결과가 수식인지 값인지 여부에 따라 수식으로 삽입 상자를 선택하거나 선택하지 않은 상태로 둡니다(기본값).
소스 문자열이 변경되는 즉시 추출된 숫자가 자동으로 업데이트되도록 하려면 이 상자를 선택하는 것이 좋습니다. 결과가 원래 문자열과 독립적이기를 원하는 경우(예: 나중에 소스 데이터를 제거하려는 경우) 이 상자를 선택하지 마십시오.
- 결과 삽입 버튼을 클릭합니다. 완료!
이전 예와 마찬가지로추출은 숫자 입니다. 즉, 계산, 합계, 평균 또는 다른 계산을 자유롭게 수행할 수 있습니다.
이 예에서는 결과를 <9로 삽입하도록 선택했습니다>values , 그리고 추가 기능은 요청된 대로 정확히 수행했습니다.
수식으로 삽입 확인란을 선택한 경우 ' d 수식 입력줄에서 수식 을 관찰합니다. 어느 것이 궁금하십니까? Ultimate Suite 평가판을 다운로드하고 직접 확인하세요 :)
사용 가능한 다운로드
Excel 추출 번호 - 샘플 통합 문서(.xlsx 파일)
Ultimate Suite - 평가판(.exe 파일)