PrecisionCalc
xl
Precision
Get Your Numbers Right
xlpEXTRACTNUM
Extracts numeric and other desired characters from a number or text.
Requires the 5,000 SD edition of xlPrecision or higher, or the Free Edition.
Decimal:
The first decimal symbol found (starting from the left) is extracted (unless the decimal symbol is entered as a numlist argument).
Any other decimal symbols found are not extracted.
Negative Numbers:
xlpEXTRACTNUM recognizes the resulting number as negative if:
It finds a hyphen to the left of any numeric digits or decimal, or
It finds a left parenthesis to the left of any numeric digit or decimal and a right parenthesis to the right of any numeric digit or decimal.
If xlpEXTRACTNUM recognizes the resulting number as negative, it is formatted with a leading hyphen even if the negative formatting it found was parentheses instead of a hyphen. To format negatives with parentheses instead of a leading hyphen, enter the "format:negative" option in a format argument.
Exponential Notation:
xlpEXTRACTNUM recognizes the resulting number as being in exponential notation if ALL of the following are true:
The exponential notation is in the form "E+" or "E".
The "E+" or "E" is to the right of the base number and to the left of the exponent.
For example, 1.2E+3 = 1200 and 1.2E3 = 0.0012
No more than one numeric digit appears to the left of the decimal symbol (but it is not necessary to have a digit to the left of the decimal).
For example, .2E+3 = 0.2E+3
If no decimal is found, there is one and only one numeric digit to the left of the "E".
For example, 2E+3 = 2000 and 2E3 = 0.002
One or more numeric digits appear after the "E+" or "E".
If a decimal symbol is found, it must be to the left of "E".
A "+" or "" is found after "E", and no numeric digits or decimal symbol are found between "E" and the "+" or "".
If "E" alone (without a "+" after it) should indicate a positive exponent, nest Microsoft Excel's SUBSTITUTE function inside xlpEXTRACTNUM to change all occurrences of "E" to "E+". See example below.
Syntax
xlpEXTRACTNUM(num,numlist...,format)
num  Required. The
number or text from which to extract numeric and other desired characters num does not appear in Microsoft Excel's 'Insert Function' dialog. Instead, the first numlist argument is considered the num argument. If the first numlist argument is a range of cells, then the upperleft cell is considered the num argument. 

numlist...  Optional. The list of characters and/or text strings to extract from num (in addition to numeric characters, which are extracted by default). Accepts up to 29 numlist arguments, or up to 28 if the optional format argument is used.  
format  Optional.
Determines formatting options (formatting negatives with parentheses instead
of a leading hyphen, adding thousands separators, adding currency symbol,
and formatting in exponential notation), and setting maximum significant
digits. Any argument that begins with the text "format:" (must include the colon at the end) is evaluated as a format argument. Each of the five format options can be used individually in separate arguments, or any number of them can be combined in the same argument. When combining multiple format options into one format argument:
Must be enclosed in double quotes ("") if included directly in an xlpEXTRACTNUM argument. Double quotes are not necessary if the format argument references a cell in which the format argument is entered. May be included anywhere but first in the series of xlpEXTRACTNUM arguments  can be the second argument, or the last, or anywhere inbetween. The format argument is not case sensitive. 

format value 
Result  
format:negative  If return value is
negative, it is formatted with parentheses ("()") instead of the default
leading hyphen (""). You can also format negatives with a red font. 

format:thousands  Return value is formatted with thousands separators (commas in English).  
format:currency  Return value is formatted with the local currency symbol. The currency symbol will be added either to the beginning or to the end of the result, whichever is appropriate for the locale.  
format:exponent  Return value is formatted in exponential notation.  
format:MSD=n  Determines the maximum number of significant digits to be returned. Default is 100, or the user's custom maximum set in the About box, or the maximum number allowed by the edition of xlPrecision, whichever is less.  
Examples of valid combination format values 

format:negative,thousands,currency,MSD=200 (recognizes negative, thousands, currency, and MSD=200) 

format: negative  thousands  currency  MSD=75 blah blah this
extra text is ignored (recognizes negative, thousands, currency, and MSD=75) 

format:negativethousandscurrencyMSD=1000 (recognizes negative, thousands, currency, and MSD=1000) 

FORMAT:NEGATIVE,THOUSANDS,CURRENCY,MSD=200 (recognizes negative, thousands, currency, and MSD=200) 

Format:Negative,Thousands,cUrReNcY,msD=200 (recognizes negative, thousands, currency, and MSD=200) 

format:MSD=200,thousands,negative,currency (recognizes MSD=200, thousands, negative, and currency) 

format:MSD=200 blah blah this extra text is ignored negative (recognizes MSD=200 and negative) 

format:currency,thousands (recognizes currency and thousands) 

Examples of invalid combination format values  
format negative,thousands,currency,MSD=200 (missing colon (:) after "format") 

format = negative,thousands,currency,MSD=200 (missing colon (:) after "format") 

Examples of partially valid combination format values  
format:negative,thousands,currency,MSD200 (recognizes negative, thousands, currency, BUT missing "=" after "MSD") 

format:negative,thousands,currency,MSD:200 (recognizes negative, thousands, currency, BUT missing "=" after "MSD") 

format:negative,thousand,currency,MSD=200 (recognizes negative, currency, and MSD=200, BUT "thousands" is misspelled as "thousand") 

format:negative,thousands,currency,MSD=1,000 (recognizes negative, thousands, currency, BUT MSD is recognized as 1, not 1000, because the comma (",") is not a numeric digit) 
Remarks
xlPrecision results are returned as text that look like numbers, not as values that Excel recognizes as numbers. This is because Excel would truncate the results to 15 significant digits if it recognized them as numbers.
format:negative, format:thousands, format:currency, and format:exponent are all ignored by the 25 SD edition of xlPrecision.
format:thousands and format:exponent ignored by the 35 SD edition of xlPrecision.
format:MSD=n is ignored if it is higher than the maximum significant digits allowed by the edition of xlPrecision.
You can use the results of xlPrecision functions as the operands in other xlPrecision formulas without losing any precision, but using them as operands in Excel's arithmetic functions will truncate them to 15 significant digits.
Decimal symbols, thousands separators, and currency symbols are all localized. This means that an xlPrecision formula that returns "$1,234,567.89" in the USA will return "1.234.567,89 €" in Germany, "1 234 567,89 €" in France, "1 234 567.89 kr" in Estonia, and "1.234.567,89Lek" in Albania.
Depending on how many significant digits the edition of xlPrecision provides, the result may be too long to conveniently view. You can view the full result by rightclicking the cell and choosing Format Cells  Alignment  Wrap Text, and widening the column to the width of the screen. An easy way to view the full result without changing column widths or wrapping text is to rightclick the cell, choose Copy, and then paste into Notepad or a word processor.
Examples
Formula  Description  Result  
=xlpEXTRACTNUM("12abc34")  Extract numeric characters from "12abc34"  1234  
=xlpEXTRACTNUM("1a2~b.c%3d)&(e@f4")  Extract numeric characters from "1a2~b.c%3d)&(e@f4"  12.34  
=xlpEXTRACTNUM("1(2)abc.34")  Extract numeric characters from "1(2)abc.34"  12.34  
=xlpEXTRACTNUM("E+~a!1b@E.c#2d$Ef%g^5h&E+")  Extract numeric characters from "E+~a!1b@E.c#2d$Ef%g^5h&E+"  1.2E5  
=xlpEXTRACTNUM("x1.2E5")  Extract numeric characters from "x1.2E5". Note, the "E" is not followed by a "+" or "".  1.25  
=xlpEXTRACTNUM(SUBSTITUTE("x1.2E5","E","E+"))  Change all occurrences of "E" in "x1.2E5" to "E+", then extract numeric characters.  1.2E+5  
=xlpEXTRACTNUM("1.2abc34","a")  Extract numeric characters, and also extract "a", from "1.2abc34"  1.2a34  
=xlpEXTRACTNUM(A1:B2)

Extract numeric characters, and also extract values in cells A1:B2 (except A1, because the first argument is a range and A1 is the upperleft corner of the range) from the value in cell A1  12abc34  
=xlpEXTRACTNUM(B2,"format:currency",A1:A3,B3,B1)

Extract numeric characters, and also extract values in cells A1:A3, B3, and B1, from value in cell B2, and formatting with parentheses for negatives, with thousands separators, and with local currency symbol  ($1,234.56)  
=xlpEXTRACTNUM(B2,"format:currency",A1:A3)

Extract numeric characters, and also extract values in cells A1:A3 from value in cell B2, and formatting with parentheses for negatives, in exponential notation, and with local currency symbol  $1.23456E+3 
See Also
xlpEXCLUDE
xlpEXCLUDENOTNUM
xlpEXTRACT