VBA CLng Function – Convert Expression to Long

Written by

Editorial Team

Reviewed by

Steve Rynearson

Last updated on July 19, 2021

This tutorial will demonstrate how to use the CLng VBA function to convert an expression to the long integer data type.

CLng Function

VBA CLng Convert Expression to Long

The VBA CLng function can be used to convert expressions to long data type inside the VBA code.

Sub CLngExample_1()
MsgBox CLng(12.34)  'Result is: 12
MsgBox CLng(12.345) 'Result is: 12
MsgBox CLng(-124)   'Result is: -124
MsgBox CLng(-12.34) 'Result is: -12
End Sub

VBA CLng Rounding

The VBA CLng function will round the decimal part of a number type or a number like expression. However, it does not round correctly in all cases. When the decimal part is 0.5 then VBA CLng function returns the closest even integer.

Sub CLngExample_2()
MsgBox CLng(0.34)     'Result is:    0

MsgBox CLng(0.99)     'Result is:    1

MsgBox CLng(-124.95)  'Result is:    -125

MsgBox CLng(1.5)      'Result is:    2

MsgBox CLng(2.5)      'Result is:    2
End Sub

We can add a decimal number relatively small to our expected decimal value to change the behavior of VBA CLng function to the expected.

Sub CLngExample_3()
MsgBox CLng(2.5)
'Result is:    2
MsgBox CLng(2.5 + 0.001)
'Result is:    3

MsgBox CLng(14.5)
'Result is:   14
MsgBox CLng(14.5 + 0.001)
'Result is:   15
End Sub

VBA CLng Converting Strings to Longs

The VBA CLng function can be used to convert strings to longs if the characters in the string have a meaning as numbers.

Sub CLngExample_4()
Dim StrEx As String
StrEx = "112"
MsgBox CLng(StrEx)
'Result is: 112

StrEx = "112.3"
MsgBox CLng(StrEx)
'Result is: 112        112.3 is rounded

StrEx = "11,2"
MsgBox CLng(StrEx)
'Result is: 112        , is ignored

StrEx = "$112"
MsgBox CLng(StrEx)
'Result is: 112        $ is ignored
End Sub

VBA CLng Run-Time Error 13 Type Mismatch

Using VBA CLng function with strings that contain non-numerical characters or characters that don’t have meaning in numerical context will result in a Run-Time error ’13’: Type mismatch.

Sub CLngExample_5()
'The code below will result in an ERROR message
'CLng can’t handle non numerical characters
Dim StrEx As String
StrEx = "Ab13"
MsgBox CLng(StrEx)
End Sub

VBA CLng Run-Time Error 6 Overflow

Using VBA CLng function with strings that result in a value smaller or bigger than the expected integer will result in a Run-Time error ’6’: Overflow. Integer data type in excel has an expected value of -2,147,483,648 to 2,147,483,647.

Sub CLngExample_6()
'The code below will result in an ERROR message
'CLng cant handle non numerical characters
Dim StrEx As String
StrEx = "2147483648"
MsgBox CLng(StrEx)
End Sub

VBA CLng Regional Settings

VBA CLng function has different behavior converting strings with comma or dot.  It uses the Regional Settings of the operating system for decimal separator and digit separator.

Sub CLngExample_7()
Dim StrEx As String
StrEx = "1,9"
MsgBox CLng(StrEx)
‘If Regional settings have , as a grouping separator then 
'Result is: 19
‘If Regional settings have , as a decimal separator then 
'Result is: 2 (2 because 1.9 gets rounded)

StrEx = "1.9"
MsgBox CLng(StrEx)
‘If Regional settings have . as a grouping separator then 
'Result is: 19
‘If Regional settings have . as a decimal separator then 
'Result is: 2 (2 because 1.9 gets rounded)
End Sub

VBA CLng Converting Booleans to Longs

VBA CLng function can convert boolean variables to longs. If the evaluated expression is true the resulting long is -1 and if the evaluated expression is false the resulting long is 0.

Sub CLngExample_8()
Dim BoolEx As Boolean
BoolEx = True
MsgBox CLng(BoolEx)
'Result is: -1
MsgBox CLng(2 = 2)
'Result is: -1

BoolEx = False
MsgBox CLng(BoolEx)
'Result is: 0
MsgBox CLng(1 = 2)
'Result is: 0
End Sub

VBA CLng Converting Dates to Longs

VBA CLng function can convert a date variable to a long. The returned value is the internal number used by excel for date storage rounded. If that number is outside of the expected long limits for VBA then we get a Run-Time error ’6’: Overflow.

Sub CLngExample_9()
Dim DateEx As Date
DateEx = #2/3/1940#
MsgBox CLng(DateEx)
'Result is: 14644
DateEx = #8/7/1964#
MsgBox CLng(DateEx)
'Result is: 23596
DateEx = #3/7/1934 11:32:04 AM#
MsgBox CLng(DateEx)
'Result is: 12485
End Sub

 

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples