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 для того, чтобы указать, что результатом выполнения той или иной операции должны стать данные определенного типа, отличающегося от типа, заданного по умолчанию.


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

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

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!

 

NURLAN

Пользователь

Сообщений: 4
Регистрация: 01.01.1970

Здравствуйте уважаемые коллеги.  Помогите, пожалуйста, решить следующий вопрос:  
В таблице имеются числовые значения, представленные в текстовом виде. Эти данные необходимо   преобразовать в числовой формат.  

     Cells(1, 1).Select  
Selection.NumberFormat = «0.00»  

  Указанный код макроса меняет формат ячеек, но при дальнейшем использовании этих данных в свободной таблицы, расчет значений не производиться так как сами значения не преобразованы в числовой формат.    
Например: после выполнения выше указанного макроса, пока не нажмешь на преобразованную ячейку двойным кликом, данные не преобразовываются.

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

Если хотите именно макросом, сделайте так:  

  With Cells(1, 1)  
.NumberFormat = «0.00»  
.value=.value*1  
End With

 

vigor

Пользователь

Сообщений: 172
Регистрация: 23.12.2012

Если без макроса, то вставляем 1 в ячейку, копируем, а потом спецвставкой, з параметром умножить и вся любовь.Очень полезная штука

 

NURLAN

Пользователь

Сообщений: 4
Регистрация: 01.01.1970

{quote}{login=GIG_ant}{date=01.07.2011 04:59}{thema=}{post}  

  With Cells(1, 1)  
.NumberFormat = «0.00»  
.value=.value*1  
End With  

    Помогло! Как теперь сделать если не одну ячейку, а почти весь столбец.  
например:  

  Range(Cells(2, col), Cells(lLastRow, col)).Select  
‘col — определенный столбец  
‘lLastRow- последняя заполненная ячейка  

  {/post}{/quote}

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Если без цикла, то спец.вставкой:  
With Range(Cells(2, col), Cells(iLastRow, col))  
.Copy  
.PasteSpecial Paste:=xlPasteValues  
.NumberFormat = «0.00»  
.Value = .Value  
End With

 

Муля

Пользователь

Сообщений: 307
Регистрация: 05.07.2010

Доброго дня всем!  
Извините, за непрошеное ввмешательство, но мне єто тоже интересно.  
Если, например,  на базе вашего кода я пишу пользовательськую функцию  

  Function Число()  
Dim objCell As Object  
For Each objCell In objRange  
With Range(Cells(2, col), Cells(iLastRow, col))  
.Copy  
.PasteSpecial Paste:=xlPasteValues  
.NumberFormat = «0.00»  
.Value = .Value  
End With  
 End If  
Next  
End Function  

  Выдает ошибку значение.  
Что я не так сделал?  
С ув. Муля!

 

ran

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

For Each objCell In objRange  
objRange — что это такое?

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Это вообще не функция. Обзовите ее sub. Функция должна возвращать значение.

Я сам — дурнее всякого примера! …

 

Муля

Пользователь

Сообщений: 307
Регистрация: 05.07.2010

Ну обозвал  
Sub Число()  
Dim objCell As Object  
For Each objCell In objRange  
With Range(Cells(2, col), Cells(iLastRow, col))  
.Copy  
.PasteSpecial Paste:=xlPasteValues  
.NumberFormat = «0.00»  
.Value = .Value  
End With  
 End If  
Next  
End Sub  

  Все равно не работает.  
Ругается на строке End If  

  С ув. Муля!

 

Муля

Пользователь

Сообщений: 307
Регистрация: 05.07.2010

{quote}{login=RAN}{date=02.07.2011 12:59}{thema=}{post}For Each objCell In objRange  
objRange — что это такое?{/post}{/quote}  
Я так понимаю что єто обект  
С ув. Муля!, который мне надо преобразовать в число

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

>> Все равно не работает.  
Правильно не работает. У Вас там куча необъявленых переменных к-рым не присвоено никаких значений, End If без If и вообще все это бессмыслица. Попробуйте так:  
Sub Число()  
   Dim c As Range, iLastRow&, col&  
   col = 2: iLastRow = 100  
   For Each c In Range(Cells(2, col), Cells(iLastRow, col))  
       c.Copy  
       c.PasteSpecial Paste:=xlPasteValues  
       c.NumberFormat = «0.00»  
       c.Value = c.Value  
   Next  
End Sub

Я сам — дурнее всякого примера! …

 

Муля

Пользователь

Сообщений: 307
Регистрация: 05.07.2010

Ув. KukLP!  
К сожалению не работает и ваш макрос.  
А вообще, то меня интересует пользоваиельськая функция на эту тему.

 

ran

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

A каким образом не работает макрос KukLP?  
Т.е. что, по вашему он должен делать, и как вы его запускаете?  
И что значит пользовательская функция на эту тему?

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Прочитал сообщение Мули, посмотрел на код Сергея — с кодом всё в порядке. Не поленился проверить — <STRONG>работает</STRONG>. Муля, Вы в следующий раз пишите лучше так: «У МЕНЯ не работает» с указанием ЧТО именно не сработало: не запустился макрос, вместо чисел написал в ячейки нецензурное слово, выдал ошибку и выключил компьютер… <BR>Скорее всего Вы его просто не запустили.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

{quote}{login=Юрий М}{date=02.07.2011 04:09}{thema=}{post}Скорее всего Вы его просто не запустили.{/post}{/quote}:-)  
Муля, выложите кусок таблицы, где не работает(правила). Может все проще. Тот перебор, что у Вас — самый неэффективный метод. Глядишь и функцию поможем сделать. А так как Вы, надергать строк из разных макросов, не понимая что они значат…  
Пользуйтесь, пока выходные, планетянам скучно:-)

Я сам — дурнее всякого примера! …

 

Муля

Пользователь

Сообщений: 307
Регистрация: 05.07.2010

Хлопцы! Простите меня дурака, п-та!!!  
Я то своейдурной головой, думал что он должен,например, слово «один», превращать в цифру «1». А он оказывается текстовый форматЮ меняет на числовой.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Мда… Про сумму прописью знаем, а сумму из прописи…:-)

Я сам — дурнее всякого примера! …

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#18

02.07.2011 18:40:03

{quote}{login=KukLP}{date=02.07.2011 05:06}{thema=}{post}Мда… Про сумму прописью знаем, а сумму из прописи…:-){/post}{/quote}  
Сергей привет, если задаться целью  сделать такой код, то его сделать можно.  
если есть логика , как говориться «туда», значит есть и оттуда.

Спасибо

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=Муля}{date=02.07.2011 01:24}{thema=}{post}Ну обозвал  
Sub Число()  
Dim objCell As Object  
For Each objCell In objRange{/post}{/quote}стиль объявления переменных прям как мой ^_^    
Как в школе учили)

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

{quote}{login=R Dmitry}{date=02.07.2011 06:40}{thema=Re: }{post}{quote}{login=KukLP}{date=02.07.2011 05:06}{thema=}{post}Мда… Про сумму прописью знаем, а сумму из прописи…:-){/post}{/quote}  
Сергей привет, если задаться целью  сделать такой код, то его сделать можно.  
если есть логика , как говориться «туда», значит есть и оттуда.{/post}{/quote}Да я не о том. Не проще ли набрать число, чем текст с последующим преобразованием его в число. Как-то в жизни не встречалось.

Я сам — дурнее всякого примера! …

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#21

02.07.2011 21:24:57

{quote}{login=KukLP}{date=02.07.2011 09:03}{thema=Re: Re: }{post}{quote}{login=R Dmitry}{date=02.07.2011 06:40}{thema=Re: }{post}{quote}{login=KukLP}{date=02.07.2011 05:06}{thema=}{post}Мда… Про сумму прописью знаем, а сумму из прописи…:-){/post}{/quote}  
Сергей привет, если задаться целью  сделать такой код, то его сделать можно.  
если есть логика , как говориться «туда», значит есть и оттуда.{/post}{/quote}Да я не о том. Не проще ли набрать число, чем текст с последующим преобразованием его в число. Как-то в жизни не встречалось.{/post}{/quote}  

  Ну не знаю как у Муля, но в жизни все может  быть, иногда в различных «экспортах» из различных программ встречается и не такое :)  

  хотя такого честно не встречал ни разу :)

Спасибо

 

Муля

Пользователь

Сообщений: 307
Регистрация: 05.07.2010

Самый простой пример, где это пригодится.  
У ведомости начисления зарплаты месяц словом, а вот у сводной — желательно цифрами.  
У всевозможных отчетах. В одном месте месяц словом, а в другоя цифрами. Анализ деятельности и так далее.  
Но если такая трансформация очень сложная, то не надо надрываться. Придумаю че нитьдр.  

  С ув. Муля!

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

я вижу это как-то так…  

  внимание — заготовка, чисто для примеру. ограничено целыми числами от 1 до 999999 и нет проверок на ошибки.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Муля

Пользователь

Сообщений: 307
Регистрация: 05.07.2010

Здраствуйте ПЛАНЕТЯНЕ!  
Ув. ikki! Великолепная штука. А если бы с милионами и назваными вами проверками, было бы гениальною  
Большое спасибо!!!  
гениально

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

{quote}{login=Муля}{date=02.07.2011 10:50}{thema=}{post}Самый простой пример, где это пригодится. У ведомости начисления зарплаты месяц словом, а вот у сводной — желательно цифрами. <…> В одном месте месяц словом, а в другоя цифрами.{/post}{/quote}  
Просто нужно нормально вводить данные: месяц в виде ДАТЫ, а отображать его в нужном виде уже форматированием. Тогда не потребуются вот такие выкрутасы. Лечите причину, а не следствие.

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

{quote}{login=ikki}{date=03.07.2011 12:02}{thema=было скучно :)}{post}я вижу это как-то так…  

  внимание — заготовка, чисто для примеру. ограничено целыми числами от 1 до 999999 и нет проверок на ошибки.{/post}{/quote}  
Добавил миллионы и миллиарды на базе файла Александра (ikki), проверку на ошибки не делал

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

{quote}{login=Муля}{date=03.07.2011 12:18}{thema=}{post}Здраствуйте ПЛАНЕТЯНЕ!  
Ув. ikki! Великолепная штука. А если бы с милионами и назваными вами проверками, было бы гениальною  
Большое спасибо!!!  
гениально{/post}{/quote}  

  ну вот Вам и домашнее задание — доработать макрос :)  

  если более серьёзно — то всё-таки не вижу я в такой задаче практического смысла.  
а для «от нечего делать» — предполагаемая реализация довольно муторная (например, надо корректно обрабатывать варианты, когда есть миллины, но нет тысяч; кроме того, надо отслеживать «уровни» чисел-строк — т.е. чтобы макрос понимал, что «пятьсот пять» — это правильно, а «пять пятьсот» — неправильно…)  

  короче — ну её нафиг, такую задачку.  
сорри.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

{quote}{login=MCH}{date=03.07.2011 12:53}{thema=Re: было скучно :)}{post}  
Добавил миллионы и миллиарды на базе файла Александра (ikki), проверку на ошибки не делал{/post}{/quote}  

  вот как…    
отличный вариант  
честно говоря, про рекурсию я забыл начисто :(

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

Чуток сократил код: UDF — пропись2число2()

 

Guest

Гость

#30

03.07.2011 14:03:32

{quote}{login=MCH}{date=03.07.2011 01:16}{thema=}{post}Чуток сократил код: UDF — пропись2число2(){/post}{/quote}  
Можно (нужно) еще добавить Option Compare Text

Понравилась статья? Поделить с друзьями:
  • Vba excel преобразовать дату в текст в excel
  • Vba excel преобразование числа в текст
  • Vba excel преобразование типов данных
  • Vba excel преобразование текста в дату
  • Vba excel преобразование даты в число