Return to VBA Code Examples
You may be required to convert numbers stored as text to actual numbers in your VBA code. In this tutorial, we are going to go over the functions that you need to use to convert a string to an integer, long, double, decimal or currency data type (Click here to learn about converting numbers to strings)
Convert String to Integer
You can use the CInt or CLng function to convert a string to an integer. If the fraction is less than .5 the function will round down, if the fraction is greater than or equal to .5 the function will round up. The following code will convert a string to an integer:
MsgBox CInt("7.55")
The result is:
The following code uses the CLng function to convert a string to an integer:
MsgBox CLng("13.5")
The result is:
Note: You can use the CInt or CLng function to convert a string to an integer or long (respectively) data types. The Long Data type is the same as an integer data type except larger numbers are allowed. In the past, the distinction was required because of memory constraints. In modern programming, there’s no reason not to use the long data type since memory is no longer an issue. So it’s always better to use a long data type instead of an integer.
You can use the Immediate Window to see how the value would be processed if not converted to an integer:
Debug.Print "13.5" + "13.5"
Usually, the text will be stored as a variable and this variable will need to be converted to a number data type as shown in the code below:
Sub Using_Variables()
Dim valueOne As String
valueOne = 5
MsgBox CLng(valueOne) + CLng(valueOne)
End Sub
Convert String to Decimal
You can use the CDbl or CDec function to convert a string to a decimal. The following code would convert a string to a double data type:
MsgBox CDbl("9.1819")
The result is:
The following code would convert a string to a decimal data type:
MsgBox CDec("13.57") + CDec("13.4")
The result is:
You can use the Immediate Window to see how the value would be processed if not converted to a double or decimal data type:
Debug.Print "13.57" + "13.4"
The result is:
Note: The decimal data type can store larger numbers than the double data type, so it’s always advisable to use the decimal data type when you are uncertain.
Convert String to Currency
You can use the CCur function to convert a string to a currency. The following code would convert a string to a currency data type:
Range("A1").Value = CCur("18.5")
The result is:
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!
I have columns of numbers that, for whatever reason, are formatted as text. This prevents me from using arithmetic functions such as the subtotal function. What is the best way to convert these «text numbers» to true numbers?
Here is a screenshot of the specific issue:
I’ve tried these snippets to no avail:
Columns(5).NumberFormat = "0"
and
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Teamothy
1,9903 gold badges15 silver badges24 bronze badges
asked Apr 21, 2016 at 13:41
aLearningLadyaLearningLady
1,9384 gold badges20 silver badges42 bronze badges
4
Use the below function (changing [E:E]
to the appropriate range for your needs) to circumvent this issue (or change to any other format such as «mm/dd/yyyy»):
[E:E].Select
With Selection
.NumberFormat = "General"
.Value = .Value
End With
P.S. In my experience, this VBA solution works SIGNIFICANTLY faster on large data sets and is less likely to crash Excel than using the ‘warning box’ method.
answered Apr 21, 2016 at 13:41
aLearningLadyaLearningLady
1,9384 gold badges20 silver badges42 bronze badges
3
I had this problem earlier and this was my solution.
With Worksheets("Sheet1").Columns(5)
.NumberFormat = "0"
.Value = .Value
End With
answered Apr 21, 2016 at 15:20
0
This can be used to find all the numeric values (even those formatted as text) in a sheet and convert them to single (CSng function).
For Each r In Sheets("Sheet1").UsedRange.SpecialCells(xlCellTypeConstants)
If IsNumeric(r) Then
r.Value = CSng(r.Value)
r.NumberFormat = "0.00"
End If
Next
answered Sep 2, 2017 at 21:29
JonesJones
1812 silver badges4 bronze badges
1
This converts all text in columns of an Excel Workbook to numbers.
Sub ConvertTextToNumbers()
Dim wBook As Workbook
Dim LastRow As Long, LastCol As Long
Dim Rangetemp As Range
'Enter here the path of your workbook
Set wBook = Workbooks.Open("yourWorkbook")
LastRow = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastCol = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
For c = 1 To LastCol
Set Rangetemp = Cells(c).EntireColumn
Rangetemp.TextToColumns DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
Next c
End Sub
answered Jan 11, 2017 at 15:39
1
''Convert text to Number with ZERO Digits and Number convert ZERO Digits
Sub ZERO_DIGIT()
On Error Resume Next
Dim rSelection As Range
Set rSelection = rSelection
rSelection.Select
With Selection
Selection.NumberFormat = "General"
.Value = .Value
End With
rSelection.Select
Selection.NumberFormat = "0"
Set rSelection = Nothing
End Sub
''Convert text to Number with TWO Digits and Number convert TWO Digits
Sub TWO_DIGIT()
On Error Resume Next
Dim rSelection As Range
Set rSelection = rSelection
rSelection.Select
With Selection
Selection.NumberFormat = "General"
.Value = .Value
End With
rSelection.Select
Selection.NumberFormat = "0.00"
Set rSelection = Nothing
End Sub
''Convert text to Number with SIX Digits and Number convert SIX Digits
Sub SIX_DIGIT()
On Error Resume Next
Dim rSelection As Range
Set rSelection = rSelection
rSelection.Select
With Selection
Selection.NumberFormat = "General"
.Value = .Value
End With
rSelection.Select
Selection.NumberFormat = "0.000000"
Set rSelection = Nothing
End Sub
answered Mar 14, 2020 at 9:10
0
The solution that for me works is:
For Each xCell In Selection
xCell.Value = CDec(xCell.Value)
Next xCell
answered Feb 22, 2018 at 17:56
Using aLearningLady’s answer above, you can make your selection range dynamic by looking for the last row with data in it instead of just selecting the entire column.
The below code worked for me.
Dim lastrow as Integer
lastrow = Cells(Rows.Count, 2).End(xlUp).Row
Range("C2:C" & lastrow).Select
With Selection
.NumberFormat = "General"
.Value = .Value
End With
answered Feb 10, 2019 at 18:18
MikeyMikey
701 gold badge1 silver badge10 bronze badges
The solution that worked for me many times is:
Sub ConvertTextToNumber()
With Range("A1:CX500") 'you can change the range
.NumberFormat = "General"
.Value = .Value
End With
End Sub
answered Sep 23, 2021 at 19:03
For large datasets a faster solution is required.
Making use of ‘Text to Columns’ functionality provides a fast solution.
Example based on column F, starting range at 25 to LastRow
Sub ConvTxt2Nr()
Dim SelectR As Range
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ThisWorkbook.Sheets("DumpDB")
LastRow = sht.Cells(sht.Rows.Count, "F").End(xlUp).Row
Set SelectR = ThisWorkbook.Sheets("DumpDB").Range("F25:F" & LastRow)
SelectR.TextToColumns Destination:=Range("F25"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
End Sub
answered Jan 15, 2019 at 7:07
LouisLouis
392 bronze badges
1
From the recorded macro one gets the code below; for a new application you just need to update selection and range:
Sub num()
Columns("B:B").Select
Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
End Sub
L.Dutch
9263 gold badges17 silver badges38 bronze badges
answered Dec 14, 2022 at 14:59
I had problems making above codes work. To me multiplying with 1 did the trick:-)
Cells(1, 1).Select
Cells(1, 1) = ActiveCell * 1
answered Dec 23, 2021 at 12:13
In this VBA Tutorial, you learn how to convert strings to numbers of the Byte, Integer, Long, Single, Double, Currency and Decimal data types.
This VBA Tutorial is accompanied by an Excel workbook containing the macros, data and formulas I use in the examples below. You can get immediate access to this example workbook by subscribing to the Power Spreadsheets Newsletter.
Use the following Table of Contents to navigate to the section that interests you.
Related VBA and Macro Tutorials
The following VBA and Macro Tutorials may help you better understand and implement the contents below:
- General VBA constructs and structures:
- Learn about essential VBA terms here.
- Learn how to work in the Visual Basic Editor here.
- Learn how to create Sub procedures here.
- Learn how to create Function procedures here.
- Learn how to work with variables here.
- Learn about VBA data types here.
- Learn about the Range object here.
- Tutorials about other useful topics:
- Learn how to work with the IFERROR worksheet function here.
You can find additional VBA and Macro Tutorials in the Archives.
#1: Convert String to Byte
VBA code to convert String to Byte
To convert a string to a number of the Byte data type, use the following statement:
CByte(String)
Process followed by VBA to convert String to Byte
To convert a string to a number of the Byte data type, use the CByte function to convert the String to a number of the Byte data type.
VBA statement explanation
- Item: CByte.
- VBA construct: CByte function.
- Description: The CByte function coerces String to the Byte data type.
CByte is usually able to carry out internationally-aware conversions from the String to the Byte data type. In other words, CByte generally recognizes between the different decimal/thousand separators and currency options that depend on your computer’s locale.
The Byte data type can hold numbers ranging from 0 to 255. If String is outside this range, an error occurs.
- Item: String.
- VBA construct: String expression and expression argument of the CByte function.
- Description: String is the string or numeric expression you convert to the Byte data type. If you explicitly declare a variable to represent String, use the Variant data type.
Macro example to convert String to Byte
The following macro example, a User-Defined Function, converts a string passed as argument (myString) to Byte.
Function stringToByte(myString As Variant) 'source: https://powerspreadsheets.com/ 'converts String to Byte 'for further information: https://powerspreadsheets.com/vba-string-to-number/ 'convert String to Byte stringToByte = CByte(myString) End Function
Effects of executing macro example to convert String to Byte
The following image illustrates the results of using the macro example in a worksheet formula. For these purposes:
- Column A contains a numeric string.
- Column B contains a worksheet formula that uses the UDF example.
When String is outside the range of Byte, the worksheet formula returns the #VALUE! error.
- Column C displays the worksheet formula used in column B.
#2: Convert String to Integer
VBA code to convert String to Integer
To convert a string to a number of the Integer data type, use the following statement:
CInt(String)
Process followed by VBA to convert String to Integer
To convert a string to a number of the Integer data type, use the CInt function to convert the String to a number of the Integer data type.
VBA statement explanation
- Item: CInt.
- VBA construct: CInt function.
- Description: The CInt function coerces String to the Integer data type.
If String contains a fraction, CInt rounds it. If this fraction is precisely 0.5, CInt rounds to the nearest even number. For example:
- 0.5 is rounded to 0.
- Both 1.5 and 2.5 are rounded to 2.
- Both 3.5 and 4.5 are rounded to 4.
- CInt is usually able to carry out internationally-aware conversions from the String to the Integer data type. In other words, CInt generally recognizes between the different decimal/thousand separators and currency options that depend on your computer’s locale.
The Integer data type can hold numbers ranging from -32,768 to 32,767. If String is outside this range, an error occurs.
- Item: String.
- VBA construct: String expression and expression argument of the CInt function.
- Description: String is the string or numeric expression you convert to the Integer data type. If you explicitly declare a variable to represent String, use the Variant data type.
Macro example to convert String to Integer
The following macro example, a User-Defined Function, converts a string passed as argument (myString) to Integer.
Function stringToInteger(myString As Variant) 'source: https://powerspreadsheets.com/ 'converts String to Integer 'for further information: https://powerspreadsheets.com/vba-string-to-number/ 'convert String to Integer stringToInteger = CInt(myString) End Function
Effects of executing macro example to convert String to Integer
The following image illustrates the results of using the macro example in a worksheet formula. For these purposes:
- Column A contains a numeric string.
- Column B contains a worksheet formula that uses the UDF example.
When String is outside the range of Integer, the worksheet formula returns the #VALUE! error. Additionally, if String contains a fraction that’s precisely 0.5, the UDF rounds to the nearest even number.
- Column C displays the worksheet formula used in column B.
#3: Convert String to Long
VBA code to convert String to Long
To convert a string to a number of the Long data type, use the following statement:
CLng(String)
Process followed by VBA to convert String to Long
To convert a string to a number of the Long data type, use the CLng function to convert the String to a number of the Integer data type.
VBA statement explanation
- Item: CLng.
- VBA construct: CLng function.
- Description: The CLng function coerces String to the Long data type.
If String contains a fraction, CLng rounds it. If this fraction is precisely 0.5, CLng rounds to the nearest even number. For example:
- 0.5 is rounded to 0.
- Both 1.5 and 2.5 are rounded to 2.
- Both 3.5 and 4.5 are rounded to 4.
CLng is usually able to carry out internationally-aware conversions from the String to the Long data type. In other words, CLng generally recognizes between the different decimal/thousand separators and currency options that depend on your computer’s locale.
The Long data type can hold numbers ranging from -2,147,483,648 to 2,147,483,647. If String is outside this range, an error occurs.
- Item: String.
- VBA construct: String expression and expression argument of the CLng function.
- Description: String is the string or numeric expression you convert to the Long data type. If you explicitly declare a variable to represent String, use the Variant data type.
Macro example to convert String to Long
The following macro example, a User-Defined Function, converts a string passed as argument (myString) to Long.
Function stringToLong(myString As Variant) 'source: https://powerspreadsheets.com/ 'converts String to Long 'for further information: https://powerspreadsheets.com/vba-string-to-number/ 'convert String to Long stringToLong = CLng(myString) End Function
Effects of executing macro example to convert String to Long
The following image illustrates the results of using the macro example in a worksheet formula. For these purposes:
- Column A contains a numeric string.
- Column B contains a worksheet formula that uses the UDF example.
When String is outside the range of Long, the worksheet formula returns the #VALUE! error. Additionally, if String contains a fraction that’s precisely 0.5, the UDF rounds to the nearest even number.
- Column C displays the worksheet formula used in column B.
#4: Convert String to Single
VBA code to convert String to Single
To convert a string to a number of the Single data type, use the following statement:
CSng(String)
Process followed by VBA to convert String to Single
To convert a string to a number of the Single data type, use the CSng function to convert the String to a number of the Single data type.
VBA statement explanation
- Item: CSng.
- VBA construct: CSng function.
- Description: The CSng function coerces String to the Single data type.
CSng is usually able to carry out internationally-aware conversions from the String to the Single data type. In other words, CSng generally recognizes between the different decimal/thousand separators and currency options that depend on your computer’s locale.
The Single data type can hold floating-point numbers ranging from:
- -3.402823E38 to -1.401298E-45 for negative values; and
- 1.401298E-45 to 3.402823E38 for positive values.
If String is outside the required range, an error occurs.
- Item: String.
- VBA construct: String expression and expression argument of the CSng function.
- Description: String is the string or numeric expression you convert to the Single data type. If you explicitly declare a variable to represent String, use the Variant data type.
Macro example to convert String to Single
The following macro example, a User-Defined Function, converts a string passed as argument (myString) to Single.
Function stringToSingle(myString As Variant) 'source: https://powerspreadsheets.com/ 'converts String to Single 'for further information: https://powerspreadsheets.com/vba-string-to-number/ 'convert String to Single stringToSingle = CSng(myString) End Function
Effects of executing macro example to convert String to Single
The following image illustrates the results of using the macro example in a worksheet formula. For these purposes:
- Column A contains a numeric string.
- Column B contains a worksheet formula that uses the UDF example.
When String is outside the range of Single, the worksheet formula returns the #VALUE! error.
- Column C displays the worksheet formula used in column B.
#5: Convert String to Double
VBA code to convert String to Double
To convert a string to a number of the Double data type, use the following statement:
CDbl(String)
Process followed by VBA to convert String to Double
To convert a string to a number of the Double data type, use the CDbl to convert the String to a number of the Double data type.
VBA statement explanation
- Item: CDbl.
- VBA construct: CDbl function.
- Description: The CDbl function coerces String to the Double data type.
CDbl is usually able to carry out internationally-aware conversions from the String to the Double data type. In other words, CDbl generally recognizes between the different decimal/thousand separators and currency options that depend on your computer’s locale.
The Double data type can hold floating-point numbers ranging from:
- -1.79769313486231E308 to -4.94065645841247E-324 for negative values; and
- 4.94065645841247E-324 to 1.79769313486232E308 for positive values.
If String is outside the required range, an error occurs.
- Item: String.
- VBA construct: String expression and expression argument of the CDbl function.
- Description: String is the string or numeric expression you convert to the Double data type. If you explicitly declare a variable to represent String, use the Variant data type.
Macro example to convert String to Double
The following macro example, a User-Defined Function, converts a string passed as argument (myString) to Double.
Function stringToDouble(myString As Variant) 'source: https://powerspreadsheets.com/ 'converts String to Double 'for further information: https://powerspreadsheets.com/vba-string-to-number/ 'convert String to Double stringToDouble = CDbl(myString) End Function
Effects of executing macro example to convert String to Double
The following image illustrates the results of using the macro example in a worksheet formula. For these purposes:
- Column A contains a numeric string.
- Column B contains a worksheet formula that uses the UDF example.
When String is outside the range of Double, the worksheet formula returns the #VALUE! error.
- Column C displays the worksheet formula used in column B.
#6: Convert String to Currency
VBA code to convert String to Currency
To convert a string to a number of the Currency data type, use the following statement:
CCur(String)
Process followed by VBA to convert String to Currency
To convert a string to a number of the Currency data type, use the CCur to convert the String to a number of the Currency data type.
VBA statement explanation
- Item: CCur.
- VBA construct: CCur function.
- Description: The CCur function coerces String to the Currency data type.
CCur is usually able to carry out internationally-aware conversions from the String to the Currency data type. In other words, CCur generally recognizes between the different decimal/thousand separators and currency options that depend on your computer’s locale.
The Currency data type holds integers scaled by 10,000. This results in Currency holding fixed-point numbers with 15 digits to the left of the decimal point and 4 digits to the right of the decimal point. Therefore, Currency can hold numbers ranging from -922,337,203,685,477.5808 to 922,337,203,685,477.5807. If String is outside this range, an error occurs.
- Item: String.
- VBA construct: String expression and expression argument of the CCur function.
- Description: String is the string or numeric expression you convert to the Currency data type. If you explicitly declare a variable to represent String, use the Variant data type.
Macro example to convert String to Currency
The following macro example, a User-Defined Function, converts a string passed as argument (myString) to Currency.
Function stringToCurrency(myString As Variant) 'source: https://powerspreadsheets.com/ 'converts String to Currency 'for further information: https://powerspreadsheets.com/vba-string-to-number/ 'convert String to Currency stringToCurrency = CCur(myString) End Function
Effects of executing macro example to convert String to Currency
The following image illustrates the results of using the macro example in a worksheet formula. For these purposes:
- Column A contains a numeric string.
- Column B contains a worksheet formula that uses the UDF example.
When String is outside the range of Currency, the worksheet formula returns the #VALUE! error.
- Column C displays the worksheet formula used in column B.
#7: Convert String to Decimal
VBA code to convert String to Decimal
To convert a string to a number of the Decimal data type, use the following statement:
CDec(String)
Process followed by VBA to convert String to Decimal
To convert a string to a number of the Decimal data type, use the CDec function to convert the String to a number of the Decimal data type.
VBA statement explanation
- Item: CDec.
- VBA construct: CDec function.
- Description: From a broad perspective, the CDec function coerces String to the Decimal data subtype of the Variant data type. In other words, CDec doesn’t return a discrete data type, but rather a Variant converted to the Decimal subtype.
CDec is usually able to carry out internationally-aware conversions from the String to the Decimal data type. In other words, CDec generally recognizes between the different decimal/thousand separators and currency options that depend on your computer’s locale.
The Decimal data type holds integers scaled by a variable power of 10. This power of 10 specifies the number of digits to the right of the decimal point. Therefore, the value ranges Decimal can hold are as follows:
- When working with a scale of 0, which results in no decimal places: -79,228,162,514,264,337,593,543,950,335 to 79,228,162,514,264,337,593,543,950,335.
- When working with 28 decimal places:
- The largest and smallest values are +7.9228162514264337593543950335 and -7.9228162514264337593543950335.
- The smallest non-zero values are -0.0000000000000000000000000001 and 0.0000000000000000000000000001.
If String is outside the required range, an error occurs.
- Item: String.
- VBA construct: String expression and expression argument of the CDec function.
- Description: String is the string or numeric expression you convert to the CDec data type. If you explicitly declare a variable to represent String, use the Variant data type.
Macro example to convert String to Decimal
The following macro example, a User-Defined Function, converts a string passed as argument (myString) to Decimal.
Function stringToDecimal(myString As Variant) 'source: https://powerspreadsheets.com/ 'converts String to Decimal 'for further information: https://powerspreadsheets.com/vba-string-to-number/ 'convert String to Decimal stringToDecimal = CDec(myString) End Function
Effects of executing macro example to convert String to Decimal
The following image illustrates the results of using the macro example in a worksheet formula. For these purposes:
- Column A contains a numeric string.
- Column B contains a worksheet formula that uses the UDF example.
When String is outside the range of Decimal, the worksheet formula returns the #VALUE! error.
- Column C displays the worksheet formula used in column B.
METHOD 1. Convert text to numbers with specific range using VBA
VBA
Sub Convert_Text_to_Numbers()
Dim ws As Worksheet
Set ws = Worksheets(«Analysis»)
With ws.Range(«B5»)
.NumberFormat = «General»
.Value = .Value
End With
End Sub
OBJECTS
Worksheets: The Worksheets object represents all of the worksheets in a workbook, excluding chart sheets.
Range: The Range object is a representation of a single cell or a range of cells in a worksheet.
PREREQUISITES
Worksheet Name: Have a worksheet named Analysis.
Range: In this example we are converting the text in cell («B5») to a number. Therefore, if using the exact VBA code, you need to capture the text that you want to convert to a number in cell («B5»).
ADJUSTABLE PARAMETERS
Range: Select the range that captures the text that you want to convert to a number by changing the cell reference («B5») in the VBA code to any range in the worksheet, that doesn’t conflict with the formula.
Worksheet Name: Select the worksheet where you are converting text to a number by changing the worksheet name («Analysis») in the VBA code to any existing worksheet in the workbook, that doesn’t conflict with the formula.
ADDITIONAL NOTES
Note 1: This VBA code will convert the text to a number in the same cell that the text is captured. In this example it will be cell («B5»).
METHOD 2. Convert text to numbers of selected range using VBA
VBA
Sub Convert_Text_to_Numbers()
With Selection
.NumberFormat = «General»
.Value = .Value
End With
End Sub
ADDITIONAL NOTES
Note 1: This VBA code will convert the text to a number in the selected cell.
METHOD 3. Convert text to numbers with specific range and different output range using VBA
VBA
Sub Convert_Text_to_Numbers()
Dim ws As Worksheet
Set ws = Worksheets(«Analysis»)
ws.Range(«D5») = ws.Range(«B5»)
With ws.Range(«D5»)
.NumberFormat = «General»
.Value = .Value
End With
End Sub
OBJECTS
Worksheets: The Worksheets object represents all of the worksheets in a workbook, excluding chart sheets.
Range: The Range object is a representation of a single cell or a range of cells in a worksheet.
PREREQUISITES
Worksheet Name: Have a worksheet named Analysis.
Range: In this example we are converting the text in cell («B5») to a number. Therefore, if using the exact VBA code, you need to capture the text that you want to convert to a number in cell («B5»).
ADJUSTABLE PARAMETERS
Range: Select the range that captures the text that you want to convert to a number by changing the cell reference («B5») in the VBA code to any range in the worksheet, that doesn’t conflict with the formula.
Range: Select the output range by changing the cell reference («D5») in the VBA code to any range in the worksheet, that doesn’t conflict with the formula.
Worksheet Name: Select the worksheet where you are converting text to a number by changing the worksheet name («Analysis») in the VBA code to any existing worksheet in the workbook, that doesn’t conflict with the formula.
METHOD 4. Convert text to numbers with specific range and different output range (with For Loop) using VBA
VBA
Sub Convert_Text_to_Numbers()
Dim ws As Worksheet
Set ws = Worksheets(«Analysis»)
For x = 5 To 10
ws.Range(«D» & x) = ws.Range(«B» & x)
With ws.Range(«D» & x)
.NumberFormat = «General»
.Value = .Value
End With
Next
End Sub
OBJECTS
Worksheets: The Worksheets object represents all of the worksheets in a workbook, excluding chart sheets.
Range: The Range object is a representation of a single cell or a range of cells in a worksheet.
PREREQUISITES
Worksheet Name: Have a worksheet named Analysis.
Range: In this example we are converting the text in range («B5:B10») to numbers. Therefore, if using the exact VBA code, you need to capture the text that you want to convert to numbers in range («B5:B10»).
ADJUSTABLE PARAMETERS
Output and Text Row Range: The text and output range in the same rows (row 5 to 10), which are represented by the x variable. You can select the output row range by changing the x For and To values in the VBA code.
Output and Text Column Range: Select the column text and output range by changing the column reference («B») and («D»), respectively, in the VBA code.
Worksheet Name: Select the worksheet where you are converting text to a number by changing the worksheet name («Analysis») in the VBA code to any existing worksheet in the workbook, that doesn’t conflict with the formula.
Numeric values are defined by data types like integer or byte. These data types are used for optimizing the processing and memory allocation in Excel. In this guide, we’re going to show you how to convert string into number in Excel VBA.
Download Workbook
Data types in VBA
Like in some other programming languages, VBA uses data types to identify what variables it can store and how they are stored. Most of the data types in VBA define numeric values. Here is a brief list of numeric data types:
Data type | Storage | Range |
Byte | 1 byte | 0 to 255 |
Integer | 2 bytes | -32,768 to 32,767 |
Long | 4 bytes | -2,147,483,648 to 2,147,483,647 |
Single | 4 bytes | -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values |
Double | 8 bytes | -1.79769313486231E308 to-4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values |
LongLong | 8 bytes |
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 Valid on 64-bit platforms only. |
Currency | 8 bytes | -922,337,203,685,477.5808 to 922,337,203,685,477.5807 |
Decimal | 14 bytes | +/-79,228,162,514,264,337,593,543,950,335 with no decimal point; +/-7.9228162514264337593543950335 with 28 places to the right of the decimal |
Since there are many numeric data types, there are many functions to convert a string into number in Excel VBA.
Functions to a convert string into number in Excel VBA
All conversion functions use the same syntax: Each requires a single string argument to convert into a number. For example:
Each function returns an error If the string argument either is not a numeric or is outside the range of the data type being converted.
CInt(«A») returns a type mismatch error, because the «A» is not a numeric value.
CByte(«1250») returns an overflow exception.
Function | Return type | Example |
CByte | Byte | CByte(«65.75») returns 66 |
CCur | Currency | CCur(«$256,000.50») returns 256000.5 |
CDbl | Double | CDbl(128.239856 * 4.8 * 0.04) returns 24.622052352 |
CDec | Decimal | CDec(«15000000.5678») returns 15000000.5678 |
CInt | Integer | CInt(«1234.56») returns 1235 |
CLng | Long | CLng(«1,500,000.88») returns 15000001 |
CLngLng | LongLong | CLngLng(«1,250,500,000.88») returns 1250500001 |
CSng | Single | CSng(«5.67854») returns 5.67854 |
Bonus: Use IsNumeric function to verify value
To avoid type mismatch errors, you can use the IsNumeric function to check if the expression is numeric or not. The function returns Boolean value based on the expression. TRUE if the expression is numeric, FALSE otherwise.
Here is a sample function that can check the data first, and convert the it into an integer if it is numeric. If the argument is not a valid number, the function returns 0.
Function ConvertInt(arg As String) As Integer If IsNumeric(arg) Then ConvertInt = CInt(arg) End Function