Excel - Extract Number From Text String
Excel - Extract Number From Text String
22
The tutorial shows how to extract number from various text strings in Excel by using formulas and the Extract tool.
When it comes to extracting part of a text string of a given length, Excel provides three Substring functions
(Left, Right and Mid) to quickly handle the task. When it comes to extracting a number from an alphanumeric
string, Microsoft Excel provides… nothing.
To get a number from a string in Excel, it takes a little ingenuity, a bit of patience, and a bunch of different
functions nested into each other. Or, you can run the Extract tool and have the job done with a mouse click.
Below you will find full details on both methods.
Important note! In the below formulas, the extraction is performed with the RIGHT and LEFT functions,
which belong to the category of Text functions. The output of these functions is always text. In our case,
the result will be a numeric substring, which in terms of Excel is also text, not number. If you need the
result to be a number (that you can use in further calculations), wrap a corresponding formula into the
VALUE function as shown in the first example.
MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},cell&"0123456789"))
We will dwell on the formula's logic a bit later. For now, simply replace cell with a reference to the cell
containing the original string (A2 in our case), and enter the formula in any empty cell in the same row, say in
B2:
=MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A2&"0123456789"))
Although the formula contains an array constant, it's a regular formula completed in the usual way by
pressing the Enter key.
Once the position of the first digit is determined, you use the RIGHT function to extract the number. To find
out how many characters should be extracted, you subtract the position of the first digit from the total length
of the string, and add one to the result because the first digit is also to be included:
=RIGHT(B2, LEN(A2)-B2+1)
Where A2 is the original string and B2 is the position of the first digit.
To eliminate the helper column containing the position of the first digit, you can embed the MIN formula
directly in the RIGHT function like this:
To force the formula to return a number rather than a numeric string, nest it into the VALUE function:
The MIN function processes the resultant array and returns the smallest value, which corresponds to the
position in of the first digit in the original string.
Additionally, we use a special construction (A2&"0123456789") to concatenate every possible number with the
original string. In situations when a certain number in the array constant is not found within the source string,
this construction acts like IFERROR forcing the formula to return a "fake" position equal to the string length +1
or more chars. As the result, if the original string does not contain any number, like in row 7 in the screenshot
above, the RIGHT formula returns an empty string.
To make things easier to understand, let's see how the formula works out for a specific cell, say A2. That cell
contains the text string "ECDAA-05", for which the SEARCH function returns the following array
{7,10,11,12,13,8,15,16,17,18}. Here's how:
0 is the 1st element of the array constant and the 7th character in the original string, therefore the first item
of the resulting array is "7".
5 is the 6th element of the array constant and the 8th character in the original string, so the sixth item of the
resulting array is "8".
No other item of the array constant is found in cell A2, and therefore the other 8 items of the resulting
array represent the positions of corresponding digits in the concatenated string (ECDAA-050123456789).
Since 7 is the smallest value in the resulting array, the MIN function returns it, so we get the position of the
first digit (0) in original string.
RIGHT(cell,SUM(LEN(cell) - LEN(SUBSTITUTE(cell,
{"0","1","2","3","4","5","6","7","8","9"},""))))
With the original text string in A2, you enter the below formula in B2 or any other empty cell in the same row,
and then copy it down the column:
First, you use the LEN and SUBSTITUTE functions to find out how many times a given number occurs in the
string. For this, you replace the number with an empty string (""), and then subtract the length of the string
without that number from the total length of the original string. This operation is performed on each
number in the array constant.
Next, the SUM function adds up all occurrences of all digits in the string.
Finally, the digit count goes to the num_chars argument of the RIGHT function instructing it to return that
many characters from the right side of the string.
Note. This formula is for the case when numbers are only at the end of a text string. If some digits are
also in the middle and/or in the beginning, the formula won't work. In this case, please use the formula
that extracts numbers from any position.
LEFT(cell,SUM(LEN(cell)-LEN(SUBSTITUTE(cell,
{"0","1","2","3","4","5","6","7","8","9"},""))))
With the original string in A2, use the following formula to get number:
=LEFT(A2,SUM(LEN(A2)-LEN(SUBSTITUTE(A2,{"0","1","2","3","4","5","6","7","8","9"},""))))
This solution works for strings that contain numbers only in the beginning. If some digits are also in the
middle or at the end of the string, the formula won't work. If you want to extract only the numbers from the
left and ignore the others, then use another formula suggested by our Excel expert.
Note. As is the case with the RIGHT function, the LEFT function returns a numeric substring, which is
technically text, not number.
Breaking down this formula would require a separate article, so you can simply copy it to your worksheet to
make sure it really works :)
Upon examining the results, however, you may notice one insignificant drawback - if the source string does
not contain a number, the formula returns zero, as in row 6 in the screenshot above. To fix this, you can wrap
the formula in the IF statement, the logical test of which checks if the source string contains any number. If it
does, the formula extracts the number, otherwise returns an empty string:
=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),"")
As shown in the screenshot below, the improved formula works beautifully (kudos to Alex, our Excel guru, for
this improvement):
Unlike in all previous examples, the result of this formula is number. To make sure of this, just notice the
right-aligned values in column B and truncated leading zeros.
With our Ultimate Suite added to your Excel ribbon, this is how you can quickly retrieve number from any
alphanumeric string:
1. Go to the Ablebits Data tab > Text group, and click Extract:
3. On the Extract tool's pane, select the Extract numbers radio button.
4. Depending on whether you want the results to be formulas or values, select the Insert as formula box or
leave it unselected (default).
My advice is to select this box if you want the extracted numbers to update automatically as soon as any
changes are made to the source strings. If you want the results to be independent on the original strings
(e.g. in case you plan to remove the source data at a later point), then do not select this box.
In this example, we've chosen to insert the results as values, and the add-in did exactly what was asked for:
If the Insert as formula checkbox was selected, you'd observe a formula in the formula bar. Curious to know
which one? Just download Ultimate Suite's trial and see for yourself :)
Available downloads
Excel Extract Number - sample workbook (.xlsx file)
Copyright © 2003 - 2021 4Bits Ltd. All rights reserved. Privacy policy Terms of use Contact us
Microsoft and the Office logos are trademarks or registered trademarks of Microsoft Corporation. Google Chrome is a trademark of
Google LLC.