How to Convert String to Number in VBA

Iqra Hasnain Feb 02, 2024
How to Convert String to Number in VBA

This article will discuss how we can convert a string to a number in VBA Excel. There is a step-by-step guide and many examples for our understanding.

Convert String to Number in VBA

In VBA code, converting numbers saved as text to real numbers is obligatory. We have many conversion options.

We can convert strings to numbers of the Byte, Integer, Long, Single, Double, Currency, and Decimal data types. We will discuss each conversion in detail with examples.

Convert String to Byte in VBA

We can easily transform a string into a number of the byte data type with the help of the following code.

# vba
byte = CByte(str)

We can use the CByte() function to achieve this conversion. The above statement has two items: CByte() and string.

CByte() function forces the string to change into a byte type. CByte() is often used to perform the internationally-aware string transformation to byte data type.

In simple terms, CByte() commonly distinguishes distinctive decimal/thousand separators and many currency options that hinge upon your computer’s location. The range that a byte data type can hold is 0 to 225. If your string does not fall in between this range, an error will occur.

Here is a macro example in which we have convertStr as an argument to convert a string to a byte.

# vba
Function convertStr(newStr As Variant)

    MsgBox (CByte(newStr))

End Function

Sub newFunc()
convertStr ("12")
End Sub

Output:

convert string to number as byte in VBA

Convert String to Integer in VBA

With the help of the following statement, you can easily convert a string to a number of the integer data type. The syntax of this function is shown below.

# vba
CInt(newStr)

It is recommended to use the Clnt() function to change a string to an integer data type. This function forces the string to change into the integer data type.

If a string holds a fraction, this function will convert it into an integer. If the fraction is precisely 0.4, this function will change it to the closest even number.

For example:

# vba
0.4 will become 0.
1.6 and 2.4 both will become 2.
3.7 and 4.3 will become 4

Clnt() is often used to perform the internationally-aware string transformation into the integer data type. In simple terms, Clnt() commonly distinguishes distinctive decimal/thousand separators and many currency options that hinge upon our computer’s location.

The range between which an integer data type can hold numbers is -32,768 to 32,767. If your string does not fall in between this range, an error will occur.

Let’s go through an example and use the CInt() function as shown below. This example sets newStr as an argument to change a string into an integer, as shown below.

# vba
Function convertToInteger(newStr As Variant)

    MsgBox (CInt(newStr))

End Function

Sub newFunc()
convertToInteger ("12.5")
End Sub

Output:

convert string to number as int in VBA

Convert String to Long in VBA

We can use the CLng() function to achieve this conversion. The syntax of this function is shown below.

# vba
CLng(Str)

We can use the CLng() function when our goal is to change a string into several long data types. The items in this statement are CLng() and string.

This function forces a string to change into the long data type.

If a string holds a fraction, this function will round it. If the fraction is precisely 0.4, this function will change it to the closest even number, as shown below.

# vba
0.4 will become 0.
1.6 and 2.4 both will become 2.
3.7 and 4.3 will become 4

CLng() is often used to perform the internationally-aware string transformation to long data types. In simple terms, CLng() commonly distinguishes distinctive decimal/thousand separators and many currency options that hinge upon your computer’s location.

The range between which an integer data type can hold numbers is -2,147,483,648 to 2,147,483,647. If your string does not fall in between this range, an error will occur.

Let’s go through an example and use the CLng() function. In this example, we have set newStr as an argument to change a string into long, as shown below.

# vba
Function convertToLong(newStr As Variant)

    MsgBox (CLng(newStr))

End Function

Sub newFunc()
convertToLong ("15.7")
End Sub

Output:

convert string to number as long in VBA

Long data type differs from integer data type by only one thing. Larger numbers are acceptable in long data types.

But there wasn’t enough memory in the old days, and it was not recommended to use long data types.

In modern times, memory is no longer a problem. We can use the long data type instead of an integer.

Convert String to Single in VBA

We can easily transform a string into a number of a single data type with the help of the following syntax, as shown below.

# vba
CSng(str)

We can use the CSng() function to achieve this conversion. There are two items in the above statement, CSng() and string.

This function forces a string to change into a single data type.

CSng() is often used to perform the internationally-aware string transformation to a single data type. CSng() commonly distinguishes distinctive decimal/thousand separators and currency options that hinge upon your computer’s location.

The range between which a single data type can hold floating-point numbers is

  • 3.402823E38 to -1.401298E-45 when values are negative
  • 1.401298E-45 to 3.402823E38 when values are positive

An error will appear if your string does not fall between this range. As shown below, let’s go through an example in which we set newStr as an argument to change a string into a single.

# vba
Function convertToSingle(newStr As Variant)

    MsgBox (CSng(newStr))

End Function

Sub newFunc()
convertToSingle ("1.3")
End Sub

Output:

convert string to number as single in VBA

Convert String to Double in VBA

With the help of the following statement, we can easily convert a string to several double data types. The syntax of this function is as shown below.

# vba
CDbl(str)

It is recommended to use the CDbl() function to change a string to a double data type. This function forces a string to change into the double data type.

CDbl() is often used to perform the internationally-aware string transformation to a double data type.

In simple words, CDbl() commonly distinguishes distinctive decimal/thousand separators and many currency options that hinge upon your computer’s location.

The range between which a double data type can hold floating-point numbers is below.

  • -1.79769313486231E308 to -4.94065645841247E-324 when values are negative.
  • 4.94065645841247E-324 to 1.79769313486232E308 when values are positive.

An error will appear if our string does not fall between this range. As shown below, let’s go through an example in which we set newStr as an argument to change a string into a double.

# vba
Function convertToDouble(newStr As Variant)

    MsgBox (CDbl(newStr))

End Function

Sub newFunc()
convertToDouble ("1.345")
End Sub

Output:

convert string to number as double in VBA

Convert String to Currency in VBA

With the help of the following statement, you can easily convert a string to several currency data types. The syntax of the function is shown below.

# vba
CCur(newStr)

It is recommended to use the CCur() function to change a string to a currency data type. This function forces a string to change into the currency data type.

CCur() is often used to perform the internationally-aware string transformation to a currency data type.

It means CCur() commonly distinguishes distinctive decimal/thousand separators and many currency options that hinge upon your computer’s location. The currency data type can hold integers by 10,000.

As a result, a currency can hold 15 numbers to the left of the decimal point and four numbers to the right of the decimal point. So the range between which a currency can hold numbers is:
-922,337,203,685,477.5808 to 922,337,203,685,477.5807.

An error will appear if your string does not fall between this range.

As shown below, let’s go through an example in which we set newStr as an argument to change a string into a currency.

# vba
Function convertToCurrency(newStr As Variant)

    msgBox(CCur(newStr))

End Function

Convert String to Decimal in VBA

We can use the following statement to achieve this conversion.

# vba
CDec(newStr)

We can use the CDec() function when our goal is to change a string into several decimal data types. This function forces a string to change into the decimal data subtype of the Variant data type.

In simple words, CDec() will return a variant changed to the Decimal subtype.

CDec() is often used to perform the internationally-aware transformation of a string to a decimal data type. It means CDec() commonly distinguishes distinctive decimal/thousand separators and many currency options that hinge upon your computer’s location.

The decimal data type can carry integers having variable power of 10. The power denotes the number of digits that can be present to the right of the decimal point.

The range in which decimals can hold values is shown below.

  • When the scale is 0, that is no decimal present the range is from 79,228,162,514,264,337,593,543,950,335 to 79,228,162,514,264,337,593,543,950,335.
  • When there are 28 decimal places, the biggest and smallest values are +7.9228162514264337593543950335 and -7.9228162514264337593543950335.
  • The smallest values containing no zero values are -0.0000000000000000000000000001 and 0.0000000000000000000000000001.

As shown below, let’s go through an example in which we set newStr as an argument to change a string into a decimal.

# vba
Function convertToDecimal(newStr As Variant)

    msgBox(CDec(newStr))

End Function

Related Article - VBA String