How to translate letters to numbers in Excel
To translate letters in a string to numbers, you can use an array formula based on the TEXTJOIN and VLOOKUP functions, with a defined translation table to provide the necessary lookups.
Formula
{=TEXTJOIN("",1,VLOOKUP(T(IF(1,MID(A1,ROW (INDIRECT("1:"&LEN(A1))),1))),xtable,2,0))}
Explanation
In the example shown, the formula in C5 is:
{=TEXTJOIN("",1,VLOOKUP(T(IF(1,MID(B5,ROW (INDIRECT("1:"&LEN(B5))),1))),xtable,2,0))}
where “xtable” is the named range E5:F10.
Note: this is an array formula and must be entered with control + shift + enter.
How this formula works
At the core, this formula uses an array operation to generate an array of letters from the input text, translates each letter individually to a number, then joins all numbers together again and returns the output as a string.
To parse the input string into an array or letters, we use MID, ROW, LEN and INDIRECT functions like this:
MID(B5,ROW(INDIRECT("1:"&LEN(B5))),1)
LEN returns the length of the input text, which is concatenated to “1:” and handed off to INDIRECT as text. INDIRECT evaluates the text as a row reference, and the ROW function returns an array of numbers to MID:
MID(B5,{1;2;3},1)
MID then extracts one character for at each starting position and we have:
=TEXTJOIN("",1,VLOOKUP(T(IF(1,{"a";"b";"c"})),xtable,2,0))
Essentially, we are asking VLOOKUP to find a match for “a”, “b”, and “c” at the same time. For obscure reasons, we need to “dereference” this array in a particular way using both the T and IF functions. After VLOOKUP runs, we have:
=TEXTJOIN("",1,{9;4;6})
and TEXTJOIN returns the string “946”. If you need a number as final result, add zero. The math operation will coerce the text into a number.
Note: the TEXTJOIN function was introduced via the Office 365 subscription program in 2018.