In this article, we’ll discuss several methods to convert string to number in Excel VBA. We’ll see how to use the built-in functions and create a custom function using them to convert string to number with VBA code examples.
Download Practice Workbook
Download this practice workbook to exercise while you are reading this article.
3 Ways to Convert String to Number in Excel VBA
1. Convert String to Number Using Type Conversion Functions
Excel provides several built-in type conversion functions. We can use them in our VBA code to easily convert from string datatype to different datatypes.
1.1 String to Integer
To convert string to integer, we can use the CInt function in our code. The CInt function takes only one argument and that should be a numeric value. Let’s try the following code in the Visual Code Editor.
Sub StringToNumber()
MsgBox CInt(12.3)
End Sub
Press F5 to run the code. The output is shown in the MsgBox.
The CInt function converted the numeric string value (“12.3”) to an integer 12.
To understand more about the CInt function, run the following code in the code editor and observe the results.
Sub StringToNumber()
For i = 3 To 7
Cells(i, 3).Value = CInt(Cells(i, 2))
Next
End Sub
The output is here in the following screenshot.
Code Explanation
In this code, we used the For…Next loop to apply the CInt function on the strings of cells B3:B7. The outputs are printed in cells C3:C7. We used the Cells function to specify the input values and where to print the output values.
Results
The CInt function converted 25.5 to the next integer number 26. On the other hand, it converted 10.3 to 10, not 11. When a decimal numeric value is less than .5, the function rounds down to the same number. But the decimal numeric string value turns into the next integer number if it is equal to or greater than .5.
Note
The integer value has a range between -32,768 to 32,767. If we put a numeric value that is out of this range, Excel will show an error.
1.2 String to Long
The CLng function converts a numeric string value to a long datatype. It works similarly to the CInt function. The key difference lies in its range which is between -2,147,483,648 and 2,147,483,647.
The code to run is here below:
Sub StringToNumber()
For i = 3 To 9
Cells(i, 3).Value = CLng(Cells(i, 2))
Next
End Sub
Here, cells B3:B9 contain some numerical string value, and converted long numbers are in cells C3:C9. The CLng function converted -32800 and 32800 successfully to long numbers which the CInt function couldn’t. But it’ll also get an error if the input numeric value is out of range.
1.3 String to Decimal
Using the CDec function we can convert a numerical string value to a decimal datatype. Run the following code to convert the numerical values in cells B3:B7 to the decimal datatype.
Sub StringToNumber()
For i = 3 To 7
Cells(i, 3).Value = CDec(Cells(i, 2))
Next
End Sub
1.4 String to Single
In this example, we’ll turn the input strings into single datatype (single-precision floating-point) numbers. For this, we need to use the CSng function.
The single datatype ranges- (i) -3.402823E38 to -1.401298E-45 for negative numbers.
(ii) 1.401298E-45 to 3.402823E38 for positive numbers.
Run the following code in the visual basic editor.
Sub StringToNumber()
For i = 3 To 7
Cells(i, 3).Value = CSng(Cells(i, 2))
Next
End Sub
In the output, cells B3:B9 contain some numerical string value, and converted single datatype numbers are in cells C3:C9. But it’ll also get an error if the input numeric value is out of range.
1.5 String to Double
In this example, we’ll turn the input strings into double datatype (double-precision floating-point) numbers. For this, we need to use the CDbl function.
The double datatype ranges- (i) -1.79769313486231E308 to -4.94065645841247E-324 for negative numbers.
(ii) 4.94065645841247E-324 to 1.79769313486232E308 for positive numbers.
Run the following code in the visual basic editor.
Sub StringToNumber()
For i = 3 To 7
Cells(i, 3).Value = CSng(Cells(i, 2))
Next
End Sub
In the output, cells B3:B9 contain some numerical string value and converted double datatype numbers are in cells C3:C9. But it’ll also get an error if the input numeric value is out of range.
1.6 String to Currency
The currency data type is handy when calculations are related to money. Moreover, if we want more accuracy in fixed–point calculation, the use of the currency data type is a good choice. We need to use the CCur function to convert a string into a currency data type. The data type ranges from -922,337,203,685,477.5808 to 922,337,203,685,477.5808.
Code to convert numeric string value of cells B3:B7 to currency data type in cells C3:C7 is here below.
Sub StringToNumber()
For i = 3 To 7
Cells(i, 3).Value = CCur(Cells(i, 2))
Next
End Sub
1.7 String to Byte
The CByte function converts numerical string values to the byte data type which ranges from 0 to 255.
Code is as follows:
Sub StringToNumber()
For i = 3 To 7
Cells(i, 3).Value = CByte(Cells(i, 2))
Next
End Sub
In the output, cells B3:B9 contain some numerical string value, and converted byte data type numbers are in cells C3:C9. But it’ll also get an error if the input numeric value is out of range.
Read more: How to Convert String to Long Using VBA in Excel
Similar Readings
- Convert String to Double in Excel VBA (5 Methods)
- How to Convert Text to Number with Excel VBA (3 Examples with Macros)
- Fix Convert to Number Error in Excel (6 Methods)
- How to Convert Scientific Notation to Number in Excel (7 Methods)
2. Use of Custom VBA Function to Check and Convert String to Number in Excel
In this illustration, we’re going to make a custom function for converting strings to numbers. We can then use this custom function in our worksheet like a built-in function. In this example, we’ll use the CInt function to convert strings to integers while creating the custom function. We could also use all the other functions described in method 1 to convert strings to different data types. Now, follow the steps below to accomplish this.
Steps:
- Here, in cells B3:B7, we have some numerical string values.
- Now, in the visual basic editor, copy and paste the following code and then press Ctrl + S to save
Function StringToNumber(inputStr)
Dim convertedNum As Variant
If IsNumeric(inputStr) Then
If IsEmpty(inputStr) Then
convertedNum = "-"
Else
convertedNum = CInt(inputStr)
End If
Else
convertedNum = "-"
End If
StringToNumber = convertedNum
End Function
- In cell C3, start typing the function name (StringToNumber). Excel will automatically suggest the function to use. Press the Tab key to enter the function.
- Put the cell reference B3 as the only argument.
- Now, press Enter after closing the parentheses.
- Locate the Fill Handle at the right bottom corner of cell C3 to apply the function to cells C4:C7.
- The final output is the coveted integer numbers from the string values.
3. VBA Code to Convert a Selected Range of Cells to Numbers in Excel
In this illustration, we’ll convert a range of selected cells containing string values to integer numbers. If any cell contains a non-numeric value in it, the output will be a dash (-) line instead. Follow the steps:
- Select cells B3:B6 having numeric strings values and B7 which contains a non-numeric
- In the Visual Basic Editor copy and paste the following code.
Sub StringToNumber()
Dim convertedNum As Variant
For Each cell In Selection
If IsNumeric(cell) Then
If IsEmpty(cell) Then
convertedNum = "-"
Else
convertedNum = CInt(cell)
End If
Else
convertedNum = "-"
End If
With cell
.Value = convertedNum
.HorizontalAlignment = xlCenter
End With
Next cell
End Sub
- Now, press F5 to run the output as shown in the following screenshot.
Notes
- We used the isNumeric function in the 2nd and 3rd methods in our VBA code that checks whether an expression can be converted to a number.
- In method 1, we used built-in functions (CInt, CDbl, CSng…..) to convert numeric string values to numbers. But if there is a non-numeric value, it’ll show a mismatch error.
Conclusion
Now, we know how to convert string values to numbers in Excel. Hopefully, it would encourage you to use this functionality more confidently. Any questions or suggestions don’t forget to put them in the comment box below.