Vba excel функция текст в число

Функции преобразования типов данных в VBA Excel. Наименования функций, синтаксис, типы возвращаемых данных, диапазоны допустимых значений выражения-аргумента.

Синтаксис функций преобразования

Выражение (аргумент) – это любое строковое или числовое выражение, возвращающее значение, входящее в диапазон допустимых значений для аргумента. Выражение может быть представлено переменной или другой функцией.

Если аргумент, переданный в функцию, не входит в диапазон типа, в который преобразуются данные, происходит ошибка.

Функции преобразования типов

Наименования функций преобразования типов, типы возвращаемых данных, диапазоны допустимых значений для аргумента:

Функция Тип данных Диапазон значений аргумента
CBool Boolean Любое допустимое строковое или числовое выражение.
CByte Byte От 0 до 255.
CCur Currency От -922 337 203 685 477,5808 до 922 337 203 685 477,5807.
CDate Date Любое допустимое выражение даты.
CDbl Double От -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений.
CDec Decimal 79 228 162 514 264 337 593 543 950 335 для чисел без десятичных знаков. Для чисел с 28 десятичными знаками диапазон составляет 7,9228162514264337593543950335. Наименьшим возможным числом, отличным от нуля, является число 0,0000000000000000000000000001.
CInt Integer От -32 768 до 32 767, дробная часть округляется.
CLng Long От -2 147 483 648 до 2 147 483 647, дробная часть округляется.
CSng Single От -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений.
CStr String Результат, возвращаемый функцией CStr, зависит от аргумента Выражение.
CVar Variant Диапазон совпадает с типом Double  для числовых значений и с типом  String  для нечисловых значений.

Дополнительно для VBA7:

Функция Тип данных Диапазон значений аргумента
CLngLng LongLong От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, дробная часть округляется. Действительно только для 64-разрядных платформ.
CLngPtr LongPtr От -2 147 483 648 до 2 147 483 647 для 32-разрядных платформ, от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 для 64-разрядных платформ, дробная часть округляется в обоих типах систем.

Примеры преобразования типов

Функция CBool

Функция CBool используется для преобразования выражений в тип данных Boolean.

Dim a

a = CBool(10) ‘Результат: True

a = CBool(0) ‘Результат: False

a = CBool(«True») ‘Результат: True

a = CBool(«Test») ‘Результат: Error

Dim a, b, c

a = «Test1»

b = «Test2»

c = CBool(a = b) ‘Результат: False

c = CBool(a <> b) ‘Результат: True

Функция CByte

Функция CByte используется для преобразования выражений в тип данных Byte.

Dim a, b, c

a = 654

b = 3.36

c = a / b ‘Результат: 194,642857142857

c = CByte(c) ‘Результат: 195

c = a * b ‘Результат: 2197,44

c = CByte(c) ‘Результат: Error

Функция CCur

Функция CCur используется для преобразования выражений в тип данных Currency.

Dim a, b, c

a = 254.6598254

b = 569.2156843

c = a + b ‘Результат: 823,8755097

c = CCur(a + b) ‘Результат: 823,8755

Функция CDate

Функция CDate используется для преобразования выражений в тип данных Date. Она распознает форматы даты в соответствии с национальной настройкой системы.

Dim a As String, b As Date, c As Double

a = «28.01.2021»

b = CDate(a) ‘Результат: #28.01.2021#

c = CDbl(b) ‘Результат: 44224

Dim a

a = CDate(44298.63895) ‘Результат: #12.04.2021 15:20:05#

a = CDate(44298) ‘Результат: #12.04.2021#

a = CDate(0.63895) ‘Результат: #15:20:05#

Функция CDbl

Функция CDbl используется для преобразования выражений в тип данных Double.

Dim a As String, b As String, c As Double

a = «45,3695423»

b = «548955,756»

c = CDbl(a) + CDbl(b) ‘Результат: 549001,1255423

Примечание
Eсли основной язык системы – русский, при записи в редакторе VBA Excel дробного числа в виде текста, ставим в качестве разделителя десятичных разрядов – запятую. Проверьте разделитель по умолчанию для своей национальной системы:
MsgBox Application.DecimalSeparator

Функция CDec

Функция CDec используется для преобразования выражений в тип данных Decimal.

Dim a As String, b As Double, c

a = «5,9228162514264337593543950335»

b = 5.92281625142643

c = CDec(a) CDec(b) ‘Результат: 0,0000000000000037593543950335

Dim a As Double, b As String, c

a = 4.2643E14

b = CStr(a) ‘Результат: «4,2643E-14»

c = CDec(a) ‘Результат: 0,000000000000042643

Функция CInt

Функция CInt используется для преобразования выражений в тип данных Integer.

Dim a As String, b As Integer

a = «2355,9228»

b = CInt(a) ‘Результат: 2356

Функция CLng

Функция CLng используется для преобразования выражений в тип данных Long.

Dim a As Date, b As Long

a = CDate(44298.63895) ‘Результат: #12.04.2021 15:20:05#

b = CLng(a) ‘Результат: 44299

a = CDate(b) ‘Результат: #13.04.2021#

Функция CSng

Функция CSng используется для преобразования выражений в тип данных Single.

Dim a As String, b As Single

a = «3,2365625106»

b = CSng(a) ‘Результат: 3,236562

Функция CStr

Функция CStr используется для преобразования выражений в тип данных String.

Dim a As Single, b As String

a = 5106.23

b = CStr(a) ‘Результат: «5106,23»

Функция CVar

Функция CVar используется для преобразования выражений в тип данных Variant.

Dim a As Double, b As String, c

a = 549258.232546

b = «Новое сообщение»

c = CVar(a) ‘Результат: 549258,232546 (Variant/Double)

c = CVar(b) ‘Результат: «Новое сообщение» (Variant/String)

Функции преобразования типов данных используются в тексте процедур VBA Excel для того, чтобы указать, что результатом выполнения той или иной операции должны стать данные определенного типа, отличающегося от типа, заданного по умолчанию.


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:
Using the CInt Function in VBA

The following code uses the CLng function to convert a string to an integer:

MsgBox CLng("13.5")

The result is:

Using the CLng Function in VBA

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"

Using the Immediate Window
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:

Converting a String to a Double Decimal Type

The following code would convert a string to a decimal data type:

MsgBox CDec("13.57") + CDec("13.4")

The result is:

Converting a string to a decimal data type in VBA

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:

Using Debug.Print to Display values

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:

Converting a String to the Currency Data Type

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!
vba save as

Learn More!

Иногда при написании макросов необходимо производить вычисления или сравнения числовых значений, которые вносятся в поля «TextBox».  Существует небольшая проблемка при работе с этими данными – информация из поля «TextBox» воспринимается программой как текстовая и, соответственно, в расчетах не может использоваться.

Для решения денной проблемы в VBA можно использовать функцию  VAL(), которая переводит в численный формат данных. VAL  — это функция конвертирующая текстовые значения аргумента в целые числовые или числовые значения с плавающей запятой. Следует отметить что функция Val при преобразовании десятичных дробей в число может распознать только точку, то есть, если вы напишете десятичную дробь через запятую, то функция распознает только первую (целую)часть дроби, остальной текст после запятой функция не воспримет. Например: VAL(«10,8»)= 10

Рассмотрим пример кода с данной функцией (VAL) и без нее:

Существует форма для внесения данных, в которой в два поля «TextBox1» и «TextBox1»  вносятся числа, которые сравниваются нажатием кнопки «Сравнить»(CommandButton1) и суммируются нажатием кнопки «Сумма» (CommandButton2).форма для заполнения exccel VBA

    Если на нажатие кнопки сравнения «Сравнить»(CommandButton1) использовать код:

    1. Private Sub CommandButton1_Click()
    2. Dim i, b As String
    3. i = TextBox1.Value
    4. b = TextBox2.Value
    5. If i < b = True Then MsgBox («Второе число больше «)
    6. If i > b = True Then MsgBox («Первое число больше «)
    7. End Sub

    А на нажатие кнопки суммы «Сумма» (CommandButton2) применить код:

    1. Private Sub CommandButton2_Click()
    2. Dim i, b, d As String
    3. i = UserForm1.TextBox1.Value
    4. b = UserForm1.TextBox2.Value
    5. d = i + b
    6. TextBox3.Value = d End Sub

    Сравнение значений будет выполняться верно, но расчеты суммы будут неверными:сравнение чисел макрос VBAСумма чисел макрос VBA

    Применим функцию VAL () в этих кодах:

      1-й код (Сравнение двух чисел)

      1. Private Sub CommandButton1_Click()
      2. Dim i, b As String
      3. i = Val(UserForm1.TextBox1.Value)
      4. b = Val(UserForm1.TextBox2.Value)
      5. If i < b = True Then MsgBox («Второе число больше «)
      6. If i > b = True Then MsgBox («Первое число больше «)
      7. End Sub

      2-й код (Сумма двух чисел)

      1. Private Sub CommandButton2_Click()
      2. Dim i, b, d As String
      3. i = Val(UserForm1.TextBox1.Value)
      4. b = Val(UserForm1.TextBox2.Value)
      5. d = i + b
      6. TextBox3.Value = d End Sub

      С таким кодом кнопки формы UserForm1 работают корректно, как показано на скриншоте далее.Верная сумма в VBA

      Скачать файл с макросом суммы и сравнения двух чисел.

      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:
      Error

      I’ve tried these snippets to no avail:

      Columns(5).NumberFormat = "0"
      

      and

       Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
              :=False, Transpose:=False
      

      Teamothy's user avatar

      Teamothy

      1,9903 gold badges15 silver badges24 bronze badges

      asked Apr 21, 2016 at 13:41

      aLearningLady's user avatar

      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

      aLearningLady's user avatar

      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

      BerticusMaximus's user avatar

      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

      Jones's user avatar

      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

      ConertVBA's user avatar

      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

      Mahesh S's user avatar

      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

      Camilo Vargas's user avatar

      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

      Mikey's user avatar

      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

      Hakob TARPOSHYAN's user avatar

      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

      Louis's user avatar

      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's user avatar

      L.Dutch

      9263 gold badges17 silver badges38 bronze badges

      answered Dec 14, 2022 at 14:59

      A Albuquerque's user avatar

      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

      Jacob Hald's user avatar

      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
      

      Понравилась статья? Поделить с друзьями:
    • Vba excel функция суммы
    • Vba excel цвет текста в msgbox
    • Vba excel функция с одной переменной
    • Vba excel цвет выделенной ячейки
    • Vba excel функция процедура for