How to Use VBA CDec Function Effectively in 3 Minutes (Excel)

Written by Kasper Langmann

VBA, or Visual Basic for Applications, is a powerful tool that can be used to automate tasks in Excel. One of the functions that can be used in VBA is the CDec function. This function is used to convert a numeric or string expression to a Decimal subtype. In this guide, we will explore how to use the VBA CDec function effectively.

Understanding the VBA CDec Function

The CDec function in VBA stands for ‘Convert to Decimal’. It is a built-in function that converts an expression into a Decimal subtype. This function is particularly useful when dealing with numbers that require a high level of precision, such as financial calculations.

The syntax for the CDec function is simple: CDec(expression). The expression can be a numeric value, a numeric string, or any valid string expression. If the expression cannot be converted to a Decimal, VBA will return an error.

Why Use the CDec Function?

The CDec function is essential when dealing with numbers that require a high level of precision. The Decimal subtype in VBA can handle up to 28 decimal places, making it ideal for financial calculations and other scenarios where precision is paramount.

Additionally, using the CDec function can help prevent rounding errors. When Excel performs calculations, it sometimes rounds numbers to fit within the data type’s precision limits. By converting numbers to the Decimal subtype, you can maintain the exact value of the number, preventing rounding errors.

How to Use the VBA CDec Function

Using the VBA CDec function is straightforward. All you need to do is pass the expression you want to convert to the function. Here’s an example:

Dim myVar As Variant
myVar = CDec("123.456")

In this example, the string “123.456” is converted to a Decimal. The result is stored in the variable myVar.

Handling Errors

As mentioned earlier, if the expression passed to the CDec function cannot be converted to a Decimal, VBA will return an error. It’s important to handle these errors to prevent your program from crashing.

One way to handle errors is by using the On Error Resume Next statement. This statement tells VBA to continue with the next line of code if an error occurs. Here’s an example:

On Error Resume Next
Dim myVar As Variant
myVar = CDec("123.456abc")
If Err.Number <> 0 Then
    MsgBox "An error occurred: " & Err.Description
End If

In this example, if an error occurs when trying to convert the string “123.456abc” to a Decimal, VBA will display a message box with the error description.

Advanced Usage of the VBA CDec Function

While the basic usage of the CDec function is straightforward, there are some advanced techniques you can use to make the most of this function.

Using CDec with Other Data Types

The CDec function can be used with other data types, not just strings. For example, you can use it to convert a Double to a Decimal. This can be useful when you need to maintain the precision of a number that is stored as a Double.

Dim myVar As Double
myVar = 123.456
Dim myDecimal As Variant
myDecimal = CDec(myVar)

In this example, the Double value 123.456 is converted to a Decimal. The result is stored in the variable myDecimal.

Using CDec in Calculations

The CDec function can also be used in calculations to ensure precision. For example, if you are performing a calculation that involves a division, you can use the CDec function to prevent rounding errors.

Dim result As Variant
result = CDec(10) / CDec(3)

In this example, the numbers 10 and 3 are converted to Decimals before the division is performed. This ensures that the result of the division is precise.


The VBA CDec function is a powerful tool that can be used to maintain precision in your Excel calculations. By understanding how to use this function effectively, you can prevent rounding errors and ensure that your calculations are accurate. Whether you’re working with financial data or performing complex mathematical calculations, the CDec function is an essential tool in your VBA toolkit.