Функции преобразования типов данных в 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.2643E—14 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 для того, чтобы указать, что результатом выполнения той или иной операции должны стать данные определенного типа, отличающегося от типа, заданного по умолчанию.
Содержание
- Type conversion functions
- Syntax
- Return types
- Remarks
- CBool function example
- CByte function example
- CCur function example
- CDate function example
- CDbl function example
- CDec function example
- CInt function example
- CLng function example
- CSng function example
- CStr function example
- CVar function example
- See also
- Support and feedback
- Метод Application.ConvertFormula (Excel)
- Синтаксис
- Параметры
- Возвращаемое значение
- Примечания
- Пример
- Поддержка и обратная связь
- Функции преобразования типов
- Синтаксис
- Возвращаемые типы
- Примечания
- Пример функции CBool
- Пример функции CByte
- Пример функции CCur
- Пример функции CDate
- Пример функции CDbl
- Пример функции CDec
- Пример функции CInt
- Пример функции CLng
- Пример функции CSng
- Пример функции CStr
- Пример функции CVar
- См. также
- Поддержка и обратная связь
Type conversion functions
Each function coerces an expression to a specific data type.
Syntax
- CBool(expression)
- CByte(expression)
- CCur(expression)
- CDate(expression)
- CDbl(expression)
- CDec(expression)
- CInt(expression)
- CLng(expression)
- CLngLng(expression) (Valid on 64-bit platforms only.)
- CLngPtr(expression)
- CSng(expression)
- CStr(expression)
- CVar(expression)
The required expression argument is any string expression or numeric expression.
Return types
The function name determines the return type as shown in the following:
Function | Return type | Range for expression argument |
---|---|---|
CBool | Boolean | Any valid string or numeric expression. |
CByte | Byte | 0 to 255. |
CCur | Currency | -922,337,203,685,477.5808 to 922,337,203,685,477.5807. |
CDate | Date | Any valid date expression. |
CDbl | Double | -1.79769313486231E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values. |
CDec | Decimal | 79,228,162,514,264,337,593,543,950,335 for zero-scaled numbers, that is, numbers with no decimal places. For numbers with 28 decimal places, the range is 7.9228162514264337593543950335. The smallest possible non-zero number is 0.0000000000000000000000000001. |
CInt | Integer | -32,768 to 32,767; fractions are rounded. |
CLng | Long | -2,147,483,648 to 2,147,483,647; fractions are rounded. |
CLngLng | LongLong | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807; fractions are rounded. (Valid on 64-bit platforms only.) |
CLngPtr | LongPtr | -2,147,483,648 to 2,147,483,647 on 32-bit systems, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 on 64-bit systems; fractions are rounded for 32-bit and 64-bit systems. |
CSng | Single | -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values. |
CStr | String | Returns for CStr depend on the expression argument. |
CVar | Variant | Same range as Double for numerics. Same range as String for non-numerics. |
If the expression passed to the function is outside the range of the data type being converted to, an error occurs.
Conversion functions must be used to explicitly assign LongLong (including LongPtr on 64-bit platforms) to smaller integral types. Implicit conversions of LongLong to smaller integrals are not allowed.
In general, you can document your code using the data-type conversion functions to show that the result of some operation should be expressed as a particular data type rather than the default data type. For example, use CCur to force currency arithmetic in cases where single-precision, double-precision, or integer arithmetic normally would occur.
You should use the data-type conversion functions instead of Val to provide internationally aware conversions from one data type to another. For example, when you use CCur, different decimal separators, different thousand separators, and various currency options are properly recognized depending on the locale setting of your computer.
When the fractional part is exactly 0.5, CInt and CLng always round it to the nearest even number. For example, 0.5 rounds to 0, and 1.5 rounds to 2. CInt and CLng differ from the Fix and Int functions, which truncate, rather than round, the fractional part of a number. Also, Fix and Int always return a value of the same type as is passed in.
Use the IsDate function to determine if date can be converted to a date or time. CDate recognizes date literals and time literals as well as some numbers that fall within the range of acceptable dates. When converting a number to a date, the whole number portion is converted to a date. Any fractional part of the number is converted to a time of day, starting at midnight.
CDate recognizes date formats according to the locale setting of your system. The correct order of day, month, and year may not be determined if it is provided in a format other than one of the recognized date settings. In addition, a long date format is not recognized if it also contains the day-of-the-week string.
A CVDate function is also provided for compatibility with previous versions of Visual Basic. The syntax of the CVDate function is identical to the CDate function; however, CVDate returns a Variant whose subtype is Date instead of an actual Date type. Since there is now an intrinsic Date type, there is no further need for CVDate. The same effect can be achieved by converting an expression to a Date, and then assigning it to a Variant. This technique is consistent with the conversion of all other intrinsic types to their equivalent Variant subtypes.
The CDec function does not return a discrete data type; instead, it always returns a Variant whose value has been converted to a Decimal subtype.
CBool function example
This example uses the CBool function to convert an expression to a Boolean. If the expression evaluates to a nonzero value, CBool returns True, otherwise, it returns False.
CByte function example
This example uses the CByte function to convert an expression to a Byte.
CCur function example
This example uses the CCur function to convert an expression to a Currency.
CDate function example
This example uses the CDate function to convert a string to a Date. In general, hard-coding dates and times as strings (as shown in this example) is not recommended. Use date literals and time literals, such as #2/12/1969# and #4:45:23 PM# , instead.
CDbl function example
This example uses the CDbl function to convert an expression to a Double.
CDec function example
This example uses the CDec function to convert a numeric value to a Decimal.
CInt function example
This example uses the CInt function to convert a value to an Integer.
CLng function example
This example uses the CLng function to convert a value to a Long.
CSng function example
This example uses the CSng function to convert a value to a Single.
CStr function example
This example uses the CStr function to convert a numeric value to a String.
CVar function example
This example uses the CVar function to convert an expression to a Variant.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Метод Application.ConvertFormula (Excel)
Преобразует ссылки на ячейки в формулу между стилями ссылок A1 и R1C1, между относительными и абсолютными ссылками или и тем, и другим. Variant.
Синтаксис
expression. ConvertFormula (Formula, FromReferenceStyle, ToReferenceStyle, ToAbsolute, RelativeTo)
выражение: переменная, представляющая объект Application.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Formula | Обязательный | Variant | Строка, содержащая формулу, которую требуется преобразовать. Это должна быть допустимая формула, и она должна начинаться со знака равенства. |
FromReferenceStyle | Обязательный | XlReferenceStyle | Пример стиля формулы. |
ToReferenceStyle | Необязательный | Variant | Константу XlReferenceStyle , указывающую стиль ссылки, который требуется вернуть. Если этот аргумент опущен, стиль ссылки не изменяется; формула остается в стиле, заданном параметром FromReferenceStyle. |
ToAbsolute | Необязательный | Variant | Константой XlReferenceType , указывающей преобразованный ссылочный тип. Если этот аргумент опущен, ссылочный тип не изменяется. |
RelativeTo | Необязательный | Variant | Объект Range , содержащий одну ячейку. Относительные ссылки относятся к этой ячейке. |
Возвращаемое значение
Примечания
Существует ограничение в 255 символов для формулы.
Пример
В этом примере формула SUM, содержащая ссылки в стиле R1C1, преобразуется в эквивалентную формулу, содержащую ссылки в стиле A1, а затем отображается результат.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Функции преобразования типов
Каждая функция приводит выражение к нужному типу данных.
Синтаксис
- CBool(выражение)
- CByte(выражение)
- CCur(выражение)
- CDate(выражение)
- CDbl(выражение)
- CDec(выражение)
- CInt(выражение)
- CLng(выражение)
- CLngLng(выражение) (действительно только для 64-разрядных платформ).
- CLngPtr(выражение)
- CSng(выражение)
- CStr(выражение)
- CVar(выражение)
Обязательный аргумент выражение — это любое строковое или числовое выражение.
Возвращаемые типы
Тип возвращаемого значения определяется по имени функции в соответствии со следующей таблицей:
Функция | Тип возвращаемых данных | Диапазон выражения-аргумента |
---|---|---|
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, дробная часть округляется. |
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-разрядных систем; дробная часть округляется в обоих типах систем. |
CSng | Single | От -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений. |
CStr | String | Результат, возвращаемый функцией CStr, зависит от аргумента выражение. |
CVar | Variant | Диапазон совпадает с типом Double для числовых значений и с типом String для нечисловых значений. |
Примечания
Если выражение, переданное в функцию, не входит в диапазон типа, в который преобразуются данные, происходит ошибка.
Для явного присвоения значений типа LongLong (включая тип LongPtr на 64-разрядных платформах) целочисленным типам данных меньшего размера должны использоваться функции преобразования. Неявные преобразования типа LongLong в меньшие целочисленные типы не допускаются.
Как правило, функции преобразования типов используются в тексте программ для того, чтобы указать, что результатом той или иной операции должны стать данные определенного типа, а не типа, заданного по умолчанию. Например, с помощью функции CCur можно принудительно перейти к вычислениям в денежном формате в тех случаях, в которых обычно используются действия с числами с обычной точностью, двойной точностью или с целыми числами.
Функции преобразования типа данных следует использовать вместо функции Val для преобразования типов данных в приложениях, поддерживающих различные региональные стандарты. Например, при использовании функции CCur десятичные разделители, разделители групп разрядов и параметры денежных единиц распознаются в соответствии с языковыми и региональными параметрами компьютера.
Если дробная часть целого числа строго равна 0,5, функции CInt и CLng всегда округляют результат до ближайшего четного числа. Например, 0,5 округляется до 0, а 1,5 — до 2. Функции CInt и CLng отличаются от функций Fix и Int, которые отбрасывают дробную часть числа, а не округляют ее. Кроме того, функции Fix и Int всегда возвращают значение того же типа, что и переданное им выражение.
Для определения возможности преобразования date в дату или время используется функция IsDate. Функция CDate распознает литералы даты и времени, а также некоторые числа, которые находятся в диапазоне допустимых дат. При преобразовании числа в дату преобразуется целая часть числа. Дробная часть преобразуется во время суток, начиная с полуночи.
Функция CDate распознает форматы даты в соответствии с национальной настройкой системы. Если формат передаваемого аргумента не соответствует распознаваемым настройкам даты, функция не сможет определить правильный порядок дней, месяцев и лет. Кроме того, длинный формат даты не распознается, если в нем содержится строка дня недели.
Функция CVDate предназначена для обеспечения совместимости с предыдущими версиями Visual Basic. Синтаксис функции CVDate не отличается от синтаксиса функции CDate; однако функция CVDate возвращает тип Variant, подтипом которого является тип Date, а не собственно тип Date. Поскольку теперь реализован встроенный тип Date, необходимость в функции CVDate отпадает. Такой же результат можно получить, если преобразовать выражение в тип Date и присвоить его типу Variant. Этот способ позволяет преобразовать все прочие встроенные типы в эквивалентные им подтипы Variant.
Функция CDec не возвращает отдельный тип данных. Вместо этого она всегда возвращает результат типа Variant, значение которого преобразовано в подтип Decimal.
Пример функции CBool
В этом примере функция CBool используется для преобразования выражения в тип Boolean. Если выражение разрешается в ненулевое значение, функция CBool возвращает значение True, в противном случае она возвращает значение False.
Пример функции CByte
В этом примере функция CByte используется для преобразования выражения в тип Byte.
Пример функции CCur
В этом примере функция CCur используется для преобразования выражения в тип Currency.
Пример функции CDate
В этом примере функция CDate используется для преобразования выражения в тип Date. Как правило, не рекомендуется определять дату и время в виде строк (как показано в этом примере). Вместо этого рекомендуется использовать литералы даты и времени, такие как #2/12/1969# и #4:45:23 PM# .
Пример функции CDbl
В этом примере функция CDbl используется для преобразования выражения в тип Double.
Пример функции CDec
В этом примере функция CDec используется для преобразования выражения в тип Decimal.
Пример функции CInt
В этом примере функция CInt используется для преобразования выражения в тип Integer.
Пример функции CLng
В этом примере функция CLng используется для преобразования выражения в тип Long.
Пример функции CSng
В этом примере функция CSng используется для преобразования выражения в тип Single.
Пример функции CStr
В этом примере функция CStr используется для преобразования выражения в тип String.
Пример функции CVar
В этом примере функция CVar используется для преобразования выражения в тип Variant.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
This is somewhat a continuation on my previous post VBA – Convert XLS to XLSX in which I provided a simple little procedure to upgrade an older xls file to the newer xlsx file format.
I thought to myself, would it be nice to have a more versatile function that could migrate between various other common file formats.
So I set out to take my original function and transform it to enable to user to specify the desired output format and came up with a nice function that enabled anyone to converts Excel compatible files to another Excel compatible format.
Then I said to myself, it must be possible to do something similar for Word and set out to create a function that would enable people to convert file between the various Word compatible formats.
Below are the 2 functions I came up with.
Excel File Format Conversion Function
The following function can be used to convert files between:
- csv -> xlsx
- xls -> xlsx
- xls -> xlsm
- xls -> txt
- xlsx -> txt
- xlsx -> csv
- and so on…
Enum XlFileFormat 'Ref: https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlfileformat-enumeration-excel xlAddIn = 18 'Microsoft Excel 97-2003 Add-In *.xla xlAddIn8 = 18 'Microsoft Excel 97-2003 Add-In *.xla xlCSV = 6 'CSV *.csv xlCSVMac = 22 'Macintosh CSV *.csv xlCSVMSDOS = 24 'MSDOS CSV *.csv xlCSVWindows = 23 'Windows CSV *.csv xlCurrentPlatformText = -4158 'Current Platform Text *.txt xlDBF2 = 7 'Dbase 2 format *.dbf xlDBF3 = 8 'Dbase 3 format *.dbf xlDBF4 = 11 'Dbase 4 format *.dbf xlDIF = 9 'Data Interchange format *.dif xlExcel12 = 50 'Excel Binary Workbook *.xlsb xlExcel2 = 16 'Excel version 2.0 (1987) *.xls xlExcel2FarEast = 27 'Excel version 2.0 far east (1987) *.xls xlExcel3 = 29 'Excel version 3.0 (1990) *.xls xlExcel4 = 33 'Excel version 4.0 (1992) *.xls xlExcel4Workbook = 35 'Excel version 4.0. Workbook format (1992) *.xlw xlExcel5 = 39 'Excel version 5.0 (1994) *.xls xlExcel7 = 39 'Excel 95 (version 7.0) *.xls xlExcel8 = 56 'Excel 97-2003 Workbook *.xls xlExcel9795 = 43 'Excel version 95 and 97 *.xls xlHtml = 44 'HTML format *.htm; *.html xlIntlAddIn = 26 'International Add-In No file extension xlIntlMacro = 25 'International Macro No file extension xlOpenDocumentSpreadsheet = 60 'OpenDocument Spreadsheet *.ods xlOpenXMLAddIn = 55 'Open XML Add-In *.xlam xlOpenXMLStrictWorkbook = 61 '(&;H3D) Strict Open XML file *.xlsx xlOpenXMLTemplate = 54 'Open XML Template *.xltx xlOpenXMLTemplateMacroEnabled = 53 'Open XML Template Macro Enabled *.xltm xlOpenXMLWorkbook = 51 'Open XML Workbook *.xlsx xlOpenXMLWorkbookMacroEnabled = 52 'Open XML Workbook Macro Enabled *.xlsm xlSYLK = 2 'Symbolic Link format *.slk xlTemplate = 17 'Excel Template format *.xlt xlTemplate8 = 17 ' Template 8 *.xlt xlTextMac = 19 'Macintosh Text *.txt xlTextMSDOS = 21 'MSDOS Text *.txt xlTextPrinter = 36 'Printer Text *.prn xlTextWindows = 20 'Windows Text *.txt xlUnicodeText = 42 'Unicode Text No file extension; *.txt xlWebArchive = 45 'Web Archive *.mht; *.mhtml xlWJ2WD1 = 14 'Japanese 1-2-3 *.wj2 xlWJ3 = 40 'Japanese 1-2-3 *.wj3 xlWJ3FJ3 = 41 'Japanese 1-2-3 format *.wj3 xlWK1 = 5 'Lotus 1-2-3 format *.wk1 xlWK1ALL = 31 'Lotus 1-2-3 format *.wk1 xlWK1FMT = 30 'Lotus 1-2-3 format *.wk1 xlWK3 = 15 'Lotus 1-2-3 format *.wk3 xlWK3FM3 = 32 'Lotus 1-2-3 format *.wk3 xlWK4 = 38 'Lotus 1-2-3 format *.wk4 xlWKS = 4 'Lotus 1-2-3 format *.wks xlWorkbookDefault = 51 'Workbook default *.xlsx xlWorkbookNormal = -4143 'Workbook normal *.xls xlWorks2FarEast = 28 'Microsoft Works 2.0 far east format *.wks xlWQ1 = 34 'Quattro Pro format *.wq1 xlXMLSpreadsheet = 46 'XML Spreadsheet *.xml End Enum '--------------------------------------------------------------------------------------- ' Procedure : XLS_ConvertFileFormat ' Author : Daniel Pineault, CARDA Consultants Inc. ' Website : http://www.cardaconsultants.com ' Purpose : Converts an Excel compatible file format to another format ' Copyright : The following is release as Attribution-ShareAlike 4.0 International ' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/ ' Req'd Refs: Uses Late Binding, so none required ' ' Input Variables: ' ~~~~~~~~~~~~~~~~ ' sOrigFile : String - Original file path, name and extension to be converted ' lNewFileFormat: New File format to save the original file as ' bDelOrigFile : True/False - Should the original file be deleted after the conversion ' ' Usage: ' ~~~~~~ ' Convert an xls file into a txt file and delete the xls once completed ' Call XLS_ConvertFileFormat("C:TempTest.xls", xlTextWindows) ' Convert an xls file into a xlsx file and NOT delete the xls once completed ' Call XLS_ConvertFileFormat("C:TempTest.xls", False) ' Convert a csv file into a xlsx file and delete the xls once completed ' Call XLS_ConvertFileFormat("C:TempTest.csv", xlWorkbookDefault, True) ' ' Revision History: ' Rev Date(yyyy/mm/dd) Description ' ************************************************************************************** ' 1 2018-02-27 Initial Release ' 2 2020-12-31 Fixed typo xlDBF24 -> xlDBF4 '--------------------------------------------------------------------------------------- Function XLS_ConvertFileFormat(ByVal sOrigFile As String, _ Optional lNewFileFormat As XlFileFormat = xlOpenXMLWorkbook, _ Optional bDelOrigFile As Boolean = False) As Boolean '#Const EarlyBind = True 'Use Early Binding, Req. Reference Library #Const EarlyBind = False 'Use Late Binding #If EarlyBind = True Then 'Early Binding Declarations Dim oExcel As Excel.Application Dim oExcelWrkBk As Excel.Workbook #Else 'Late Binding Declaration/Constants Dim oExcel As Object Dim oExcelWrkBk As Object #End If Dim bExcelOpened As Boolean Dim sOrigFileExt As String Dim sNewXLSFileExt As String 'Determine the file extension associated with the requested file format 'for properly renaming the output file Select Case lNewFileFormat Case xlAddIn, xlAddIn8 sNewFileExt = ".xla" Case xlCSV, xlCSVMac, xlCSVMSDOS, xlCSVWindows sNewFileExt = ".csv" Case xlCurrentPlatformText, xlTextMac, xlTextMSDOS, xlTextWindows, xlUnicodeText sNewFileExt = ".txt" Case xlDBF2, xlDBF3, xlDBF4 sNewFileExt = ".dbf" Case xlDIF sNewFileExt = ".dif" Case xlExcel12 = 50 'Excel Binary Workbook *.xlsb sNewFileExt = ".xlsb" Case xlExcel2, xlExcel2FarEast, xlExcel3, xlExcel4, xlExcel5, xlExcel7, _ xlExcel8, xlExcel9795, xlWorkbookNormal sNewFileExt = ".xls" Case xlExcel4Workbook = 35 'Excel version 4.0. Workbook format (1992) *.xlw sNewFileExt = ".xlw" Case xlHtml = 44 'HTML format *.htm; *.html sNewFileExt = ".html" Case xlIntlAddIn, xlIntlMacro sNewFileExt = "" Case xlOpenDocumentSpreadsheet 'OpenDocument Spreadsheet *.ods sNewFileExt = ".ods" Case xlOpenXMLAddIn 'Open XML Add-In *.xlam sNewFileExt = ".xlam" Case xlOpenXMLStrictWorkbook, xlOpenXMLWorkbook, xlWorkbookDefault = 51 sNewFileExt = ".xlsx" Case xlOpenXMLTemplate 'Open XML Template *.xltx sNewFileExt = ".xltx" Case xlOpenXMLTemplateMacroEnabled 'Open XML Template Macro Enabled *.xltm sNewFileExt = ".xltm" Case xlOpenXMLWorkbookMacroEnabled 'Open XML Workbook Macro Enabled *.xlsm sNewFileExt = ".xlsm" Case xlSYLK 'Symbolic Link format *.slk sNewFileExt = ".slk" Case xlTemplate, xlTemplate8 ' Template 8 *.xlt sNewFileExt = ".xlt" Case xlTextPrinter 'Printer Text *.prn sNewFileExt = ".prn" Case xlWebArchive 'Web Archive *.mht; *.mhtml sNewFileExt = ".mhtml" Case xlWJ2WD1 'Japanese 1-2-3 *.wj2 sNewFileExt = ".wj2" Case xlWJ3, xlWJ3FJ3 'Japanese 1-2-3 format *.wj3 sNewFileExt = ".wj3" Case xlWK1, xlWK1ALL, xlWK1FMT 'Lotus 1-2-3 format *.wk1 sNewFileExt = ".wk1" Case xlWK3, xlWK3FM3 'Lotus 1-2-3 format *.wk3 sNewFileExt = ".wk3" Case xlWK4 'Lotus 1-2-3 format *.wk4 sNewFileExt = ".wk4" Case xlWKS, xlWorks2FarEast 'Lotus 1-2-3 format *.wks sNewFileExt = ".wks" Case xlWQ1 'Quattro Pro format *.wq1 sNewFileExt = ".wq1" Case xlXMLSpreadsheet 'XML Spreadsheet *.xml sNewFileExt = ".xml" End Select 'Determine the original file's extension for properly renaming the output file sOrigFileExt = "." & Right(sOrigFile, Len(sOrigFile) - InStrRev(sOrigFile, ".")) 'Start Excel On Error Resume Next Set oExcel = GetObject(, "Excel.Application") 'Bind to existing instance of Excel If Err.Number <> 0 Then 'Could not get instance of Excel, so create a new one Err.Clear On Error GoTo Error_Handler Set oExcel = CreateObject("Excel.Application") Else 'Excel was already running bExcelOpened = True End If On Error GoTo Error_Handler oExcel.ScreenUpdating = False oExcel.Visible = False 'Keep Excel hidden until we are done with our manipulation Set oExcelWrkBk = oExcel.Workbooks.Open(sOrigFile) 'Open the original file 'Save it as the requested new file format oExcelWrkBk.SaveAS Replace(sOrigFile, sOrigFileExt, sNewFileExt), lNewFileFormat, , , , False XLS_ConvertFileFormat = True 'Report back that we managed to save the file in the new format oExcelWrkBk.Close False 'Close the workbook If bExcelOpened = False Then oExcel.Quit 'Quit Excel only if we started it Else oExcel.ScreenUpdating = True oExcel.Visible = True End If If bDelOrigFile = True Then Kill (sOrigFile) 'Delete the original file if requested Error_Handler_Exit: On Error Resume Next Set oExcelWrkBk = Nothing Set oExcel = Nothing Exit Function Error_Handler: MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _ "Error Number: " & Err.Number & vbCrLf & _ "Error Source: XLS_ConvertFileFormat" & vbCrLf & _ "Error Description: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _ , vbOKOnly + vbCritical, "An Error has Occurred!" oExcel.ScreenUpdating = True oExcel.Visible = True 'Make excel visible to the user Resume Error_Handler_Exit End Function
Word File Format Conversion Function
The following function can be used to convert files between:
- doc -> docx
- docx -> dotx
- docx -> pdf
- docx -> html
- and so on…
Enum WdSaveFormat 'Ref: https://msdn.microsoft.com/en-us/vba/word-vba/articles/wdsaveformat-enumeration-word wdFormatDocument = 0 'Microsoft Office Word 97 - 2003 binary file format. wdFormatDOSText = 4 'Microsoft DOS text format. *.txt wdFormatDOSTextLineBreaks = 5 'Microsoft DOS text with line breaks preserved. *.txt wdFormatEncodedText = 7 'Encoded text format. *.txt wdFormatFilteredHTML = 10 'Filtered HTML format. wdFormatFlatXML = 19 'Open XML file format saved as a single XML file. ' wdFormatFlatXML = 20 'Open XML file format with macros enabled saved as a single XML file. wdFormatFlatXMLTemplate = 21 'Open XML template format saved as a XML single file. wdFormatFlatXMLTemplateMacroEnabled = 22 'Open XML template format with macros enabled saved as a single XML file. wdFormatOpenDocumentText = 23 'OpenDocument Text format. *.odt wdFormatHTML = 8 'Standard HTML format. *.html wdFormatRTF = 6 'Rich text format (RTF). *.rtf wdFormatStrictOpenXMLDocument = 24 'Strict Open XML document format. wdFormatTemplate = 1 'Word template format. wdFormatText = 2 'Microsoft Windows text format. *.txt wdFormatTextLineBreaks = 3 'Windows text format with line breaks preserved. *.txt wdFormatUnicodeText = 7 'Unicode text format. *.txt wdFormatWebArchive = 9 'Web archive format. wdFormatXML = 11 'Extensible Markup Language (XML) format. *.xml wdFormatDocument97 = 0 'Microsoft Word 97 document format. *.doc wdFormatDocumentDefault = 16 'Word default document file format. For Word, this is the DOCX format. *.docx wdFormatPDF = 17 'PDF format. *.pdf wdFormatTemplate97 = 1 'Word 97 template format. wdFormatXMLDocument = 12 'XML document format. wdFormatXMLDocumentMacroEnabled = 13 'XML document format with macros enabled. wdFormatXMLTemplate = 14 'XML template format. wdFormatXMLTemplateMacroEnabled = 15 'XML template format with macros enabled. wdFormatXPS = 18 'XPS format. *.xps End Enum '--------------------------------------------------------------------------------------- ' Procedure : Word_ConvertFileFormat ' Author : Daniel Pineault, CARDA Consultants Inc. ' Website : http://www.cardaconsultants.com ' Purpose : Converts a Word compatible file format to another format ' Copyright : The following is release as Attribution-ShareAlike 4.0 International ' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/ ' Req'd Refs: Uses Late Binding, so none required ' ' Input Variables: ' ~~~~~~~~~~~~~~~~ ' sOrigFile : String - Original file path, name and extension to be converted ' lNewFileFormat: New File format to save the original file as ' bDelOrigFile : True/False - Should the original file be deleted after the conversion ' ' Usage: ' ~~~~~~ ' Convert a doc file into a docx file but retain the original copy ' Call Word_ConvertFileFormat("C:UsersDanielDocumentsResume.doc", wdFormatPDF) ' Convert a doc file into a docx file and delete the original doc once converted ' Call Word_ConvertFileFormat("C:UsersDanielDocumentsResume.doc", wdFormatPDF, True) ' ' Revision History: ' Rev Date(yyyy/mm/dd) Description ' ************************************************************************************** ' 1 2018-02-27 Initial Release '--------------------------------------------------------------------------------------- Function Word_ConvertFileFormat(ByVal sOrigFile As String, _ Optional lNewFileFormat As WdSaveFormat = wdFormatDocumentDefault, _ Optional bDelOrigFile As Boolean = False) As Boolean '#Const EarlyBind = True 'Use Early Binding, Req. Reference Library #Const EarlyBind = False 'Use Late Binding #If EarlyBind = True Then 'Early Binding Declarations Dim oWord As Word.Application Dim oDoc As Word.Document #Else 'Late Binding Declaration/Constants Dim oWord As Object Dim oDoc As Object #End If Dim bWordOpened As Boolean Dim sOrigFileExt As String Dim sNewFileExt As String 'Determine the file extension associated with the requested file format 'for properly renaming the output file Select Case lNewFileFormat Case wdFormatDocument sNewFileExt = "." Case wdFormatDOSText, wdFormatDOSTextLineBreaks, wdFormatEncodedText, wdFormatOpenDocumentText, wdFormatText, wdFormatTextLineBreaks, wdFormatUnicodeText sNewFileExt = ".txt" Case wdFormatFilteredHTML, wdFormatHTML sNewFileExt = ".html" Case wdFormatFlatXML, wdFormatXML, wdFormatXMLDocument sNewFileExt = ".xml" Case wdFormatFlatXMLTemplate sNewFileExt = "." Case wdFormatFlatXMLTemplateMacroEnabled sNewFileExt = "." Case wdFormatRTF sNewFileExt = ".rtf" Case wdFormatStrictOpenXMLDocument sNewFileExt = "." Case wdFormatTemplate sNewFileExt = "." Case wdFormatWebArchive sNewFileExt = "." Case wdFormatDocument97 sNewFileExt = ".doc" Case wdFormatDocumentDefault sNewFileExt = ".docx" Case wdFormatPDF sNewFileExt = ".pdf" Case wdFormatTemplate97 sNewFileExt = "." Case wdFormatXMLDocumentMacroEnabled sNewFileExt = ".docm" Case wdFormatXMLTemplate sNewFileExt = ".doct" Case wdFormatXMLTemplateMacroEnabled sNewFileExt = "." Case wdFormatXPS sNewFileExt = ".xps" End Select 'Determine the original file's extension for properly renaming the output file sOrigFileExt = "." & Right(sOrigFile, Len(sOrigFile) - InStrRev(sOrigFile, ".")) 'Start Excel On Error Resume Next Set oWord = GetObject(, "Word.Application") 'Bind to existing instance of Word If Err.Number <> 0 Then 'Could not get instance of Word, so create a new one Err.Clear On Error GoTo Error_Handler Set oWord = CreateObject("Word.Application") Else 'Word was already running bWordOpened = True End If On Error GoTo Error_Handler oWord.Visible = False 'Keep Word hidden until we are done with our manipulation Set oDoc = oWord.Documents.Open(sOrigFile) 'Open the original file 'Save it as the requested new file format oDoc.SaveAs2 Replace(sOrigFile, sOrigFileExt, sNewFileExt), lNewFileFormat Word_ConvertFileFormat = True 'Report back that we managed to save the file in the new format oDoc.Close False 'Close the document If bWordOpened = False Then oWord.Quit 'Quit Word only if we started it Else oWord.Visible = True 'Since it was already open, ensure it is visible End If If bDelOrigFile = True Then Kill (sOrigFile) 'Delete the original file if requested Error_Handler_Exit: On Error Resume Next Set oDoc = Nothing Set oWord = Nothing Exit Function Error_Handler: MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _ "Error Number: " & Err.Number & vbCrLf & _ "Error Source: XLS_ConvertFileFormat" & vbCrLf & _ "Error Description: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _ , vbOKOnly + vbCritical, "An Error has Occurred!" oWord.Visible = True 'Make excel visible to the user Resume Error_Handler_Exit End Function
Missing File Extensions
Unlike the Excel function, the Word function is currently missing some of the file extensions. I created the general framework, but could not easily find the associated file extensions to some of the file format. You need only complete the missing entry and it will work. So simply update the
sNewFileExt = "."
entries as applicable.
g.tomilin Пользователь Сообщений: 36 |
#1 05.02.2018 12:20:04 Добрый день, хочу записать макрос преобразования книги из xls в xlsx. Вот что записал макрорекодер:
Но проблема в том, что файлы могут открывать в разных директориях и иметь разные имена. Пытался использовать ACTIVEBOOK.PATH & ACTIVEBOOK.NAME но файл сохраняется с расширением xls, т.к. видимо name включает и расширение Изменено: g.tomilin — 05.02.2018 17:27:19 Что такое всё? |
||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Изменено: Jack Famous — 05.02.2018 12:24:12 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Ігор Гончаренко Пользователь Сообщений: 13746 |
#3 05.02.2018 12:43:22
каким способом планируете выбирать файлы? Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Alemox Пользователь Сообщений: 2183 |
тогда диалоговое окно по выбору файлов с последующим их открытием и пересохранением в нужное расширение. Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. |
g.tomilin Пользователь Сообщений: 36 |
Ігор Гончаренко, |
RAN Пользователь Сообщений: 7091 |
#6 05.02.2018 17:20:22
Тады в надстройку код
|
||||
g.tomilin Пользователь Сообщений: 36 |
RAN, только начинаю изучать vba, и у меня вопрос, я так понимаю представленный макрос просто добавляет к ActiveWorkbook.FullName ,букву «x» ? В т.ч. для этого макрорекодер указывает FileFormat:=xlOpenXMLWorkbook |
RAN Пользователь Сообщений: 7091 |
g.tomilin, вы изложили хотелку. |
_Igor_61 Пользователь Сообщений: 3007 |
#9 06.02.2018 07:45:29
Внимательно посмотрите на код от RAN, а потом прочитайте это:
|
||||
g.tomilin Пользователь Сообщений: 36 |
RAN, =)) Спасибо, я же говорю только начинаю изучать. увидел 51 но даже не подумал что в ней зашифрован целый мир Осталось только закрыть и открыть книгу, т.к. у преобразованной книги остается режим совместимости _Igor_61, а где можно помотреть весь перечень таких цифровых комбинаций для VBA? Изменено: g.tomilin — 06.02.2018 09:16:03 |
RAN Пользователь Сообщений: 7091 |
#11 06.02.2018 09:02:58
|
||
_Igor_61 Пользователь Сообщений: 3007 |
#12 06.02.2018 09:35:31 Посмотреть наверное где-то в справке или в интернете. Я об этом от Юрия М. узнал в одной из тем:
|
||
g.tomilin Пользователь Сообщений: 36 |
RAN, нашел кодировки форматов, увидел возможные варианты причин ошибки, но к сожалению через ф1 не понять как закрыть и открыть книгу =) Изменено: g.tomilin — 06.02.2018 10:19:19 |
g.tomilin Пользователь Сообщений: 36 |
#14 06.02.2018 10:21:34 _Igor_61, да я в справке просто 51 набрал и он выдал —
Что такое всё? |
|
g.tomilin Пользователь Сообщений: 36 |
Есть ещё какие-нибудь предложения по вопросу? =) |
sokol92 Пользователь Сообщений: 4445 |
#16 06.02.2018 17:31:04
Тут . Владимир |
||
так: Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
g.tomilin Пользователь Сообщений: 36 |
Ігор Гончаренко, проблема в том что путь как и имя файла неконстанта. |
Дмитрий Щербаков Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
#19 07.02.2018 09:27:20
ну да, ну да. И Вы вообще не знаете куда сохраняли и как назвали файл? А как же Вы тогда кодом его сохраняете, позвольте узнать? Не думаю, что все это происходит при помощи двух неизвестных. Скорее всего это какие-то переменные, которые никто не мешает использовать не только для сохранения, но и для открытия. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Дмитрий Щербаков Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
#20 07.02.2018 09:39:38 Вот, накидал код — должен работать:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
g.tomilin Пользователь Сообщений: 36 |
#21 07.02.2018 09:51:40 Дмитрий Щербаков, Вот код, может конечно не идеальный но работает. добавил к коду
По поводу множества открытых xls тоже спасибо, буду иметь в виду. Но в практике обычно открывается один файл с ним происходят преобразования, он анализируется, после уже открывается другой файл и т.д. Всем спасибо (особоенно RAN, Ігор Гончаренко, Дмитрий Щербаков, )! Решение найдено. ps Дмитрий Щербаков протестирую ваш код. Дмитрий Щербаков, с if красивее и удобнее, спасибо =) Изменено: g.tomilin — 07.02.2018 11:09:52 Что такое всё? |
||
g.tomilin Пользователь Сообщений: 36 |
#22 07.02.2018 11:28:36 RAN,
Что такое всё? |
||
эквивалентно Dim OldName as String тут Изменено: Ігор Гончаренко — 07.02.2018 13:06:19 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
g.tomilin Пользователь Сообщений: 36 |
Ігор Гончаренко,Спасибо за объяснение все понятно. |
RAN Пользователь Сообщений: 7091 |
#25 07.02.2018 18:47:35 Именно. PS
Не могли бы вы прокомментировать, что делают, и зачем сделаны добавки? Изменено: RAN — 07.02.2018 18:53:47 |
||
g.tomilin Пользователь Сообщений: 36 |
#26 08.02.2018 09:15:57 RAN, не верно скопировал Private Sub CommandButton1_Click() Т.е. если просто пересохранить файл в xlsx то остается режим совместимости, поэтому нужно закрыьт и заново открыть преобразованную книгу. Изменено: g.tomilin — 08.02.2018 09:38:01 Что такое всё? |
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
Most times, you won’t need to «convert»; VBA will do safe implicit type conversion for you, without the use of converters like CStr
.
The below code works without any issues, because the variable is of Type String, and implicit type conversion is done for you automatically!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
Result:
«My number is: 0»
You don’t even have to get that fancy, this works too:
Dim myString as String
myString = 77
«77»
The only time you WILL need to convert is when the variable Type is ambiguous (e.g., Type Variant, or a Cell’s Value
(which is Variant)).
Even then, you won’t have to use CStr
function if you’re compounding with another String variable or constant. Like this:
Sheet1.Range("A1").Value = "My favorite number is " & 7
«My favorite number is 7»
So, really, the only rare case is when you really want to store an integer value, into a variant or Cell value, when not also compounding with another string (which is a pretty rare side case, I might add):
Dim i as Integer
i = 7
Sheet1.Range("A1").Value = i
7
Dim i as Integer
i = 7
Sheet1.Range("A1").Value = CStr(i)
«7»
Как преобразовать число в текст (на подобии =текст() )
Смотрите также.Columns(4).TextToColumns сохранив только значения Case 2 1654 L10(6, 2) = As Integer Dim = «цента» Naim_Sotye_5 txt & Sotni(vl) «миллион » mln(2)
миллионов 999 тысяч макрос работает, но Replace(Temp, Chr(160), «»,
For Each rn Excel, когда современные
текстом. Иногда такие
Cells(i, j)=val(Cells(i, j).value)не вяжется)voidex
.Columns(6).TextToColumns- добавляем фильтр
LETTERS = Format(d, «шестьдесятого» 1584 L10(7, LETTERS As String,
= «центов» Case
Case 5 ‘ = «миллиона « 999 . если в выбранном 1, , vbBinaryCompare) In Selection rn эффективные менеджеры под
ячейки помечаются зеленымWatcher_1Hugo121
: Нужно какую нибудь.Columns(7).TextToColumns для заголовка «00») & « 1) = «семьдесят»: LETTDAY As String, «евро» Naim_Valuta_1 = — десятки тысяч mln(3) = «миллионаSub Перевести_выделенное_число_в_текст() Dim диапазоне есть текст,
Temp = Replace(Temp, = Val(Replace(Replace(rn, Chr(160), стол ходили зеленого индикатором, который вы,
:: Включите рекордер, позадавайте функцию VBA, котораяEnd WithВ конечном виде » & LETTMONTH L10(7, 2) = LETTMONTH As String,
«евро» Naim_Valuta_2 = vl = Mid(SumInt, » mln(4) =
SumBase As Double, то выдается ошибка. «,», «.», 1, «»), » «, уголка-индикатора еще не скорее всего, видели:Watcher_1
форматов, выключите. И бы выполняла тоVitality получаем отчет, как & » «
«семьдесятого» 1585 L10(8, LETTYEAR As String
«евро» Naim_Valuta_5 = shag, 1) If «миллиона » mln(5) SumText As String Эта проблема решена , vbTextCompare) Chislo
«»)) Next End было в принципеПричем иногда такой индикатор, А подсчет автосуммы смотрите код. же самое что: Добавил лист с в листе changed. & Format(y, «;##») 1) = «восемьдесят»: Dim n1000 As «евро» Naim_Sotye_1 = vl = 1 = «миллионов « With Selection SumText в предыдущем посте, = Val(Temp) r.Cells(i,
SubА если так (он появился только не появляется (что
по каждому столбцу
gandalf и =текст() (тесть исходным файлом иВопрос, почему часть
& » года» L10(8, 2) = Integer, n100 As «цент» Naim_Sotye_2 = And Mid(SumInt, shag mln(6) = «миллионов
= .Text SumText там где вводили j).Value = Chislo пере введёт?
с 2003 года). гораздо хуже). как можно реализовать?: я делаю так: преобразования чего либо то, что получилось значений получается в 1655 Case 3 «восемьдесятого» 1586 L10(9, Integer, n10 As
«цента» Naim_Sotye_5 = + 1, 1) » mln(7) = = Replace(SumText, «
Temp и Chislo. Next Next EndVasil_M
Алгоритм такой:
В общем и целом,
Vasil_M
Cells(3, 3).value=»‘» &
в ячейке в
после макроса. Как
формате текст и
1656 LETTERS =
1) = «девяносто»: Integer, n1 As «центов» Case «гривны» <> 0 Then
«миллионов » mln(8) «, «», 1, В данном случае SubПростое удаление неразрывного
CyberForum.ru
Преобразовать текст в число
: Благодарю всех зав любую пустую ячейку
появление в ваших: Так Cells(3, 3).value текст) пример, ячейчка F10 плывут запятые для UCase(Left(LETTDAY, 1)) & L10(9, 2) =
Integer ‘ МЕСЯЦА Naim_Valuta_1 = «гривна» GoTo LblNextX Else = «миллионов «
, vbTextCompare) ‘ весь текст заменяется пробела таинственным образом помощь.
введите 1 данных чисел-как-текст обычно
Sub m() DimJonny_5Попробовал записать макрос c неправильной десятичной
GL Cost? Mid(LETTDAY, 2) & «девяностого» ‘ СОТНИ m(1) = «января» Naim_Valuta_2 = «гривны» txt = txt mln(9) = «миллионов
Удаляем в числе на 0. Как отбрасывает дробную часть.Если стоит автофильтрскопируйте ее приводит к большому i&, x As: Добрый день!
используя эту функцию запятой и F9SkyPro » » & 1587 L100(0, 1)
m(2) = «февраля» Naim_Valuta_5 = «гривен» & Desyatki(vl) ‘ » ‘——————————————— tys(0) пробелы SumText = только разберусь сdzug и нужны промежуточныевыделите ячейки с числами количеству весьма печальных Double i =помогите решить проблемку. получилось следующее:
с текстом вместо: Может вот эти LETTMONTH & « = «»: L100(0, m(3) = «марта» Naim_Sotye_1 = «копейка» — если конец = «тысяч « Replace(SumText, «‘», «», этим — подредактирую: Всем привет. Решил
итоги и смещение в текстовом формате последствий:
1 Do For Есть таблица exelActiveCell.FormulaR1C1 = «=TEXT(RC[-1],0)»не
числа. строки мешают? » & LETTYEAR 2) = «» m(4) = «апреля» Naim_Sotye_2 = «копейки» триады от 11 tys(1) = «тысяча 1, , vbTextCompare) пост. «открыть» для себя
итогов на ячейку и поменяйте у
перестает нормально работать сортировка j = 1 в одной из совсем то
M73568200?’200px’:»+(this.scrollHeight+5)+’px’);»>Selection.NumberFormat = «#,##0.00″
& » года» 1588 L100(1, 1) m(5) = «мая» Naim_Sotye_5 = «копеек» до 19 то » tys(2) = ‘ Удаляем вЕвгений_Пермь возможности VBA, но вниз, то код них формат на — «псевдочисла» выдавливаются To 12 If колонок находятся числовыеЧтото на подобии: Как минимум строчку
Selection.NumberFormat = «#,##0″ 1657 End Select = «сто»: L100(1,
m(6) = «июня»
Case «» Naim_Valuta_1 перескакиваем на единицы, «тысячи » tys(3) числе знаки ‘: Прежде чем «менять
идет тяжело, попытаюсь следующий: числовой (ничего не вниз, а не
Len(Cells(i, j)) = данные в текстовомSub m_1() Columns(«A»).NumberFormat с
Попробуйте : 1658 ДАТАПРОПИСЬЮ = 2) = «сотого» m(7) = «июля»
= «» Naim_Valuta_2
иначе — формируем = «тысячи « SumText = Replace(SumText, шрифт на числовой» это исправить путемSub m() Dim
произойдет) располагаются по-порядку как
0 Then Exit формате. Какможно средствами = «0.00» End200?’200px’:»+(this.scrollHeight+5)+’px’);»>Selection.NumberFormat = «0.00000»Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Selection.NumberFormat = «0.000» LETTERS End Function 1589 L100(2, 1) m(8) = «августа» = «» Naim_Valuta_5 десятки Case 4 tys(4) = «тысячи «,», «.», 1, , проверьте функцией: изучения материала на i&, x Asщелкните по ячейкам с положено: Do x = VBA преобразовать текст SubСпасибо.Перенести в самый+рекомендую почистить код,Sasha_Smirnov
= «двести»: L100(2, m(9) = «сентября»
= «» Naim_Sotye_1 ‘ — единицы » tys(5) = , vbTextCompare) ‘
IsNumeric(r.Cells(i, j)) этом форуме (до Double i = псевдочислами правой кнопкойфункции типа
Cells(i, j) + в числовые данные?Hugo121 конец макроса, результат убрать все ActiveWindow.ScrollRow: 2) = «двухсотого» m(10) = «октября» = «» Naim_Sotye_2 тысяч vl = «тысяч » tys(6) Меняем , наМожно еще вот этого просматривал только 1 Do For мыши и выберитеВПР (VLOOKUP) 1 Cells(i, j)Busine2009: Зачем? будет точнее и тому подобныйВосемьдесятого
1590 L100(3, 1) 1554 m(11) =
CyberForum.ru
Преобразование текста в число в vba
= «» Naim_Sotye_5 Mid(SumInt, shag, 1)
= «тысяч « . SumText = так сделать: ролики с youtube’a,
j = 1 команду
не находят требуемые = x -: Sub m_1() Columns(«A»).NumberFormat
Есть ведь фукнцииSkyPro мусор.?! А может,
= «триста»: L100(3, «ноября» 1555 m(12) = «» Case If shag > tys(7) = «тысяч
Replace(SumText, Chr(160), «»,Sub Текст_число() Dim
но таким «глубоких»
To 12 IfСпециальная вставка (Paste Special)
значения, потому как 1 Next i = «0.00» End
листа, тот же: епрст! )
Vitalityвосьмунадесятого
2) = «трехсотого»
= «декабря» ‘ Else Naim_Valuta_1 = 2 Then If
» tys(8) = 1, , vbBinaryCompare)
i As Integer основ я пока
Len(Cells(i, j)) =или используйте сочетание
для них число = i + Sub TRIM() например.
Что бы записать: В них я
Лучше уж степлер 1591 L100(4, 1) ЕДИНИЦЫ 1556 L1(0, Valuta Naim_Valuta_2 = (Mid(SumInt, shag - «тысяч » tys(9) ‘ Удаляем в For i =
не нашел). Ранее 0 Then Exit клавиш и такое же 1 Loop ForJonny_5
planetaexcel.ru
Преобразование чисел-как-текст в нормальные числа
Хотя непонятно зачем в ячейку запятую, устанавливаю числовой форматЧто ж, посмотрим = «четыреста»: L100(4, 1) = «»: Valuta Naim_Valuta_5 = 2, 1) = = «тысяч « числе неразрывные пробелы 75 To 109 пользовался просто макрорекодером, Do x =Ctrl+Alt+V
число-как-текст различаются: j = 1: Ячейки «по хитрому»
voidex в коде ВБА с двумя знаками на отзывы бухгалтеров 2) = «четырехсотого» L1(0, 0) =
shag — 1, Error Resume Next .Collapse Direction:=wdCollapseEnd .TypeText On Error Resume часть функций он 1 Cells(i, j) вариант ошибочно j).Formula = «=SUM(« пример прилагаю. ActiveCell.FormulaR1C1 = «=TEXT(RC[-1],0)»Попробуйте поменять в столбца H, числовой_shark = «пятьсот»: L100(5, = «» 1557
«сотых» Naim_Sotye_5 = 1) = 0 shag = 0 Text:=» » & Next If .Value просто не записывает, = x -Значения (Values)многие другие функции Excel
Способ 1. Зеленый уголок-индикатор
& Cells(1, j).Addressколонку «А» нужно как было нужно, макросе все строки с 5ю знаками: 2) = «пятисотого» L1(1, 1) = «сотых» End Select And vl = SumInt = Int(SumBase) Число_в_текст(SumBase, «руб») End <> «» Then с чем и 1 Next i
и также перестают нормально & «:» &
преобразовать в число. но если кто где меняется точка для G. ПочемуSasha_Smirnov 1593 L100(6, 1) «одна»: L1(1, 0) If shag = «0») Then GoTo For x = With End Sub .Value = .Value
Способ 2. Повторный ввод
столкнулся недавно. = i +Умножить (Multiply) работать: Cells(i — 1,Busine2009 знает функции vba на запятую : они могут быть, у = «шестьсот»: L100(6, = «первое»: L1(1, 1 Then shag LblNextX End If Len(SumInt) To 1 Public Function Число_в_текст(ByVal + 0 EndСуть проблемы: при 1 Loop ForПо-сути, мы выполняем тои т.д. j).Address & «)»:
поделитесь200?’200px’:»+(this.scrollHeight+5)+’px’);»>Replace What:=».», Replacement:=»,» неверные?KoGG
Способ 3. Формула
2) = «шестисотого» 2) = «первого» = 2 If Sclon_Tys = Edinicy(vl) Step -1 shag
SumBase As Double, With Next i копировании значений из j = 1 же самое, чтоОсобенно забавно, что естественное Next End SubJonny_5Hugo121на:SkyPro’а тоже хороший код 1594 L100(7, 1)
1558 L1(2, 1) vl = 0 & tys(vl) ‘ = shag + ByVal Valuta As End Sub это 1С/excel с удаленки
Способ 4. Специальная вставка
To 12 Cells(i и в прошлом желание просто изменитьVasil_M,: В VBA естьКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>Replace What:=».», Replacement:=».»: Vitality, пробовали убрать (: = «семьсот»: L100(7,
- = «две»: L1(2, Or vl >
- — вводим переменную
- 1 Select Case String) As String на тот случай, на рабочий стол + 1, j).Formula способе — умножение
- формат ячейки на: Все работает. Спасибо.а если сделать cstr()Вот так, короче:Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub диезы?Sasha_Smirnov 2) = «семисотого»
- 0) = «второе»: 4 Or (Mid(SumInt, Sclon_Tys из-за иного x Case 12 ‘Переводит цифровое значение
если в ячейках компа копируются значения = «=SUBTOTAL(9, « содержимого ячеек на числовой — неKoGG формат «Общий» -voidex
Способ 5. Текст по столбцам
changeView()200?’200px’:»+(this.scrollHeight+5)+’px’);»>Range(«H:H»).NumberFormat = «0.00» ‘число: никому так и 1595 L100(8, 1) L1(2, 2) = shag — 1, склонения тысяч в ‘ — сотни в текстовое предложение. имеются текстовые и с пробелами, которые & Cells(1, j).Address единицу — но помогает. Т.е. вы,: ведь когда исправляешь: Кстати как неWith Sheets(1) и два знака не пригодился. = «восемьсот»: L100(8, «второго» 1559 L1(3,
2) > 10 русском языке If миллиардов vl = ‘Параметр Valuta: ‘ пустые выражения и приходится постоянно обрабатывать, & «:» & не формулами, а буквально, выделяете ячейки,Watcher_1
ошибку «Преобразовать в странно cstr не.Columns(«A:A»).TextToColumns Destination:=Range(«A1»), DataType:=xlFixedWidth, после запятойvoidex
Способ 6. Макрос
2) = «восьмисотого» 1) = «три»: And Mid(SumInt, shag vl = 1 Mid(SumInt, shag, 1) «руб» — рубли, их нужно оставить. чтобы применять к Cells(i — 1, напрямую из буфера. щелкаете по ним, вновь нужна помощь… число», то формат хочет преобразовывать в _Range(«G:G»).NumberFormat = «0.00000»: И как я
1596 L100(9, 1) L1(3, 0) = — 1, 2) Then Sclon_Tys =
txt = txt ‘ «дол» -КаТеРиНкАя ним формулы. j).Address & «)»Если псеводчисла, которые надо правой кнопкой мыши,Стоит автофильтр. Необходимо: ячейки становится не текст ,тоесть excelFieldInfo:=Array(Array(0, 1), Array(19, ‘число и пять понимаю @ -
= «девятьсот»: L100(9, «третье»: L1(3, 2) < 20) Then «одна » & & Sotni(vl) Case
P.S.
доллары, ‘ «евр»: Помогите пожалуйста написатьРаньше просто заменял Next End Sub преобразовать, вдобавок еще выбираете промежуточные итоги и «Числовой», а «Общий»? не смещает текст 1), Array(69, 1), знаков после запятой текстовй формат 2) = «девятисотого»
planetaexcel.ru
Преобразовать текст в число
= «третьего» 1560 txt = txt
tys(vl) ‘ - 11 ‘ - — евро, ‘ программу в VBA=)Дана этот лишний пробелTatNsk и записаны сФормат ячеек (Format Cells)
смещение ячейки внизJonny_5 влево и не Array(72, 2), Array(86,Перезапишите макрорекордером установкуа какие еще ‘ ТЫСЯЧИ 1597 L1(4, 1) = + Naim_Valuta_5 Else для тысяч склонение
десятки миллиардов vl «грив»- гривны, ‘ строка S, содержащая
и на этом: Лучше так: неправильными разделителями целой, меняете формат на на одну, для: тогда другой вопрос:
появляется зеленый треугольничек, 1), _ формата ячейки есть «знаки» для L1000(1) = «тысячного» «четыре»: L1(4, 0) If vl = «один» и «два» = Mid(SumInt, shag, «» — без дату в виде все. Решил этоCells(i, j) = и дробной частиЧисловой (Number) этих самых итогов. можно ли как говорящий о том,Array(89, 2), Array(105,Vitality numberforma? 1598 L1000(2) = = «четвертое»: L1(4, 1 Then txt
неприменимо ( поэтому 1) If vl
наименования, ‘ прочие ДД.ММ.ГГГГ, например «14.03.2008». дело автоматизировать, но
Cells(i, j) * или тысяч, то, жмете
Vasil_M нибудь исправить эту что это число 2)), TrailingMinusNumbers:=True: SkyPro, диезы попробовал
просто исходя из «двухтысячного» 1599 L1000(3)
2) = «четвертого» = txt + вводим переменную Sclon_Tys = «1» And текстовые наименования валют Разработать программу, преобразующую проблем стало еще
1 можно использовать другойОК: Sub Текст_в_числа() ‘
ошибку макросом? или форматированное как тест.Columns(«A:G»).EntireColumn.AutoFit убрать, но неInteger %
= «трехтысячного» 1600 1561 L1(5, 1) Naim_Valuta_1 Else txt ) If vl Mid(SumInt, shag +
используются без склонения. дату в таком больше. После заменыikki подход. Выделите исходный- и ничего Пере вводит выделенную все таки толькоSub test() myvalue.Columns(«F:F»).Replace What:=».», Replacement:=».» помогло. Каким образомLong & L1000(4) = «четырехтысячного» = «пять»: L1(5, = txt + = 2 Then 1, 1) <> Dim Edinicy(0 To виде в текстовую появилась новая проблема: а обосновать? чем диапазон с данными не происходит! Совсем! область. Применять для открывать файл и
= Cells(5, 1)
.Columns(«G:G»).Replace What:=»,», Replacement:=»» можно перезаписать установку
Single ! 1601 L1000(5) = 0) = «пятое»: Naim_Valuta_2 End If Sclon_Tys = «две 0 Then GoTo 19) As String запись даты. Вывести — цифры преобразовались именно лучше? и нажмите кнопкуВозможно, «это не баг, преобразования текстовых чисел все править ручками. Cells(3, 3) =.Columns(«G:G»).Replace What:=».», Replacement:=».» формата ячейки?Double #
«пятитысячного» 1602 L1000(6) L1(5, 2) = Sotye = CInt((SumBase » & tys(vl)
LblNextX Else txt Dim Desyatki(0 To в ячейку А1 в текст иTatNskТекст по столбцам (Text а фича», конечно, после сканера. Setdzug CStr(myvalue) End Sub.Columns(«D:D»).Replace What:=»,», Replacement:=»»SkyProString $ = «шеститысячного» 1603 «пятого» 1562 L1(6, — SumInt) * ‘ — для = txt & 9) As String активного рабочего стола их нужно заменить: Вот и я to columns) но нам от R = Application.Selection
: Попробуйте вот такИ еще такой.Columns(«D:D»).Replace What:=».», Replacement:=».»: нажать запись макросаCurrency @ L1000(7) = «семитысячного» 1) = «шесть»: 100) StrSotye = тысяч склонение «один» Desyatki(vl) ‘ - Dim Sotni(0 To строку S, а на числа. о том. Пишемна вкладке этого не легче. R.Replace What:=Chr(160), Replacement:=»», (для первого столбца вопрос, можно ли
.Columns(«F:F»).NumberFormat = «0.00000» и изменить форматированиене вяжется) 1604 L1000(8) = L1(6, 0) = Format(Sotye, «00») txt и «два» неприменимо если конец триады 9) As String
в ячейку А2Sub БезПробелов() ‘ и ничего неДанные (Data) Так что давайте-к LookAt:=xlPart, _ SearchOrder:=xlByRows, до первой пустой как то задать.Columns(«D:D»).NumberFormat = «0.00» ячейки. После чегоВернуться к обсуждению: «восьмитысячного» 1605 L1000(9)
«шестое»: L1(6, 2) = txt & ( поэтому вводим от 11 до Dim mlrd(0 To – преобразованное значение БезПробелов Макрос ‘ объесняем.. На самом деле рассмотрим несколько способов MatchCase:=False, SearchFormat:=False, _ ячейки) : длину поля в.Columns(«G:G»).NumberFormat = «0.00» подставить те строки,Как преобразовать число = «девятитысячного» 1606 = «шестого» 1563 » » & переменную Sclon_Tys ) 19 то перескакиваем 9) As String (т.е., например, «14 Удаляет пробелы междуС таким подходом этот инструмент предназначен исправить ситуацию - ReplaceFormat:=False R.Replace What:=»Sub m() Dim excel, как вEnd With которые получились в в текст (на SYM(1) = «тысяча» L1(7, 1) = StrSotye & « If shag > на единицы, иначе Dim mln(0 To марта 2008 г.»), цифрами ‘ Сочетание берем: для деления слипшегося один из них «, Replacement:=»», LookAt:=xlPart, i&, x As access? тоесть напримерEnd Sub макрос, который вы подобии =текст() ) 1607 SYM(2) = «семь»: L1(7, 0) » Select Case
1 Then If — формируем десятки 9) As String но не именно клавиш: Ctrl+у Cells.ReplaceDim a As текста по столбцам, вам обязательно поможет.
_ SearchOrder:=xlByRows, MatchCase:=False, Double i = 1 знак илиVitality
записали ранее.Следующий ответ «тысячи» 1608 SYM(3) = «седьмое»: L1(7, Left(StrSotye, 1) Case Mid(SumInt, shag - Case 10 ‘
Dim tys(0 To эту дату, а What:=»*», Replacement:=»» Cells.Select Double a = но, в данномЕсли на ячейке с SearchFormat:=False, _ ReplaceFormat:=False 1 Do If 5 итд..: Теперь всё работает,SkyProVitality = «тысяч» 1609 2) = «седьмого» «0», «2», «3», 1, 1) = — единицы миллиардов 9) As String любую ввести? Я Dim i As [A1] [A1] = случае, мы используем числом с текстовом For i = Len(Cells(i, 1)) =Просто excel сохраняет спасибо!): Вы бы более: Добрый день. При d = Day(ДАТА) 1564 L1(8, 1)
«4», «5», «6», 1 Then Sclon_Tys vl = Mid(SumInt, Dim SumInt, x,
вот попробовала начать,
Double i = aи получаем тоже
его с другой формате вы видите 1 To R.Rows.Count 0 Then Exit по умолчанию 9Erdni подробно описали ситуацию запуске макроса числовые ‘ число 1610 = «восемь»: L1(8, «7», «8», «9» = Edinicy(Mid(SumInt, shag shag, 1) If shag, vl As но зависла=( Помогите 1 Do For самое (хотя это,
CyberForum.ru
Преобразование любой даты в текст
целью. зеленый уголок-индикатор, то For j = Do x = как я посмотрел: Здравствуйте! (что конкретно нужно значения почему-то частично If d Mod 0) = «восьмое»: PereKluch = Right(StrSotye, — 1, 2)) shag > 1 Integer Dim txt, пожалуйста решение дальше j = 1 вероятно, аналог функцииПропустите первых два шага считайте, что вам 1 To R.Columns.Count Cells(i, 1) +Hugo121Подскажите каким кодом получить из каких
отображаются в виде 10 = 0 L1(8, 2) = 1) Case Else & «тысяч « Then If Mid(SumInt, Sclon_Tys As String продолжить=) To 999 If Cdbl). нажатием на кнопку повезло. Можно просто R.Cells(i, j).Value = 1 Cells(i, 1): cstr() преобразовывает в в VBA можно данных) + файл текста, плюс меняется Then 1611 LETTDAY
«восьмого» 1565 L1(9, PereKluch = StrSotye End If txt shag — 1, Dim Naim_Valuta_1 AsSub дата() Dim Len(Cells(i, j)) =А быстрее лиДалее (Next) выделить все ячейки Val(R.Cells(i, j).Value) Next = x - текст — а выполнить операцию, выполняемую примера с исходными положение десятичного знака = IIf(ПАДЕЖ = 1) = «девять»: End Select Select = txt & 1) = 1 String, Naim_Valuta_2 As s, d As 0 Then Exit операция *1 чем
CyberForum.ru
Макрос преобразование цифр в слова
, а на третьем с данными и
Next End SubЗаодно 1 i = эксель преобразовывает назад. «руками» в Excel данными, и что (см. приложение). Например, 1, L10(d /
L1(9, 0) = Case PereKluch Case Sclon_Tys ‘-КОНЕЦ БЛОКА_______________________ Then txt = String, Naim_Valuta_5 As
Date, i As Do Cells(i, j) +1, затем -1 воспользуйтесь кнопкой нажать на всплывающий
удаляет пробелы и i + 1 Он ведь не следующим образом: должно получиться.
ячейка G5 в 10, 0), L10(d «девятое»: L1(9, 2) «1» txt = Case 3 ‘
txt & Edinicy(Mid(SumInt, String Dim Naim_Sotye_1 Integer s =
= CDbl(Cells(i, j)) тут вопрос.Дополнительно (Advanced) желтый значок с
неразрывные пробелы. Loop End Sub дурак — видитВ некоторых ячейках,На данный момент листе original - / 10, 2)) = «девятого» 1566 txt & Naim_Sotye_1 — сотни vl shag — 1, As String, Naim_Sotye_2 InputBox(«S = «) Next i =Только зачем все. Откроется диалоговое окно, восклицательным знаком, аА применительно кBusine2009 что это число. содержащих числа есть единственное, что могу 142,13882 как число, 1612 Else 1613 L1(10, 1) = Case «2», «3», = Mid(SumInt, shag, 2)) & «миллиардов As String, Naim_Sotye_5 d = Split(s, i + 1 это, если функция где можно задать затем выбрать команду данному коду?: файл по любомуТогда перед тем, зелёный треугольничек сверху посоветовать — скопируйте а в листе If d 0 «десять»: L1(10, 0) «4» txt = 1) txt = » Else txt As String Dim «:») s1 = Loop Range(«B2»).Select End Val специально для имеющиеся сейчас вПреобразовать в число (Convertcountervector надо открывать: ни как писать это слева в самой данные листа ориджинал changed эта же And n100 = = «десятое»: L1(10, txt & Naim_Sotye_2 txt & Sotni(vl) = txt & Sotye As Integer, «» Dim M(20) SubПротестировал этот код топика предназначена (по нашем тексте символы-разделители: to number): Здраствуйте. вручную, ни с «тексточисло» в ячейку ячейке. И при и вставьте на ячейка 14 213 0 And n10 2) = «десятого» Case Else txt Case 2 ‘ Edinicy(vl) & mlrd(vl) StrSotye As String M(1) = «января» на обычных числах описанию).После нажатия на:Спасибо за ответы помощью VBA нельзя — сделайте ей выборе такой ячейки, лист чейнджед только 882,00000. С чем = 0 And 1567 L1(11, 1) = txt & — десятки vl ‘числа в диапозоне Dim PereKluch As M(2) = «февраля» без вставки -m-chГотовоВсе числа в выделенном на предыдущие мои работать с закрытыми текстовый формат. рядом появляется восклиц. значения. может быть связана n1 = 0 = «одиннадцать»: L1(11, Naim_Sotye_5 End Select = Mid(SumInt, shag, от 11 до String Edinicy(0) = M(3) = «марта» все работает, не: Убрать лишнюю строкуExcel преобразует наш диапазоне будут преобразованы темы: KukLP, ikki, файлами. Я покаЯ спрашивал зачем значёк. При нажатииVitality проблема? Then 1628 LETTYEAR 0) = «одиннадцатое»: Число_в_текст = UCase(Left(txt, 1) If vl 19 склоняются на «» Edinicy(1) = M(4) = «апреля» обрабатываются правда значения, кода с оператором текст в нормальные в полноценные. Hugo, Юрий М. не знаю, как — не ответите? на восклиц. значёк,: Пробовал. Не помогло.По файлу: original = Trim(LETTYEAR & L1(11, 2) = 1)) & Right(txt, = «1» And «миллиардов» независимо от «один » Edinicy(2) M(5) = «мая» если идет пустая и переменной всяко числа.Если зеленых уголков нетВы меня многому это сделать -Sub test() myvalue выпадает списочек для Записал отдельно макрос — лист, в » » & «одиннадцатого» 1568 L1(12, Len(txt) — 1) Mid(SumInt, shag + последнего числа триады = «два « M(6) = «июня» колонка между данными, лучше.Если подобные преобразования вам совсем, то проверьте научили. надо смотреть в = Cells(5, 1) выбора. Нужно выбрать на разбивку по котором данные во L1000(n1000)) 1629 ElseIf 1) = «двенадцать»: End Function 1, 1) <> Else txt = Edinicy(3) = «три M(7) = «июля» но это иКод *1 Val приходится делать часто, — не выключеныНо чем больше интернете. Cells(3, 3).NumberFormat = не «Число сохранено столбцам и изменение время записи макроса, n1000 > 0 L1(12, 0) =seha1986 0 Then GoTo txt & Edinicy(vl) » Edinicy(4) = M(8) = «августа» понятно, значит массив cSng cDbl 10Y00777,121432 то имеет смысл ли они в учусь, тем большеJonny_5 «@» Cells(3, 3) как текст», а текстового формата на в changed - Then 1630 LETTYEAR «двенадцатое»: L1(12, 2): А это полезный LblNextX Else txt & mlrd(vl) End «четыре » Edinicy(5) M(9) = «сентября» заканчивается и дальше Ошибка 10 Ошибка автоматизировать этот процесс настройках вашего Excel вопросов.: Спасибо большое все = CStr(myvalue) End «Преобразовать в число». числовой. всё равно данные после запуска = Trim(LETTYEAR & = «двенадцатого» 1569 код, кот. должен = txt & If ‘-КОНЕЦ БЛОКА_______________________ = «пять « M(10) = «ноября» макрос не работает. Ошибка 10000777,121433 10000777,121433 при помощи несложного (В одном из заработало. SubЕсли прописать: криво получается - макроса, macros - » » & L1(13, 1) = идти всегда в Desyatki(vl) ‘ - Case 9 ‘ Edinicy(6) = «шесть M(11) = «декабря» Далее решил протестировать 10000777 10000777 10000777,121433 макроса. Нажмите сочетаниеФайл — Параметры - ответов в темеBusine2009voidexSelection.NumberFormat = «#,##0.00″ часть в текстовом кнопка с назначенным L1(n1000, 1)) 1631 «тринадцать»: L1(13, 0) связки с предыдущими, если конец триады — сотни миллионов » Edinicy(7) =Toxa33rus с вставкой с 0,121434 0,121434 0 клавиш Alt+F11 или Формулы — Числа, «Функция DeJoin» мне: Мой вариант (вернее: Из сапа выгружается, то это формате, часть в макросом, плюс оригинальный If n1000 = = «тринадцатое»: L1(13, особенно в фин. от 11 до vl = Mid(SumInt, «семь » Edinicy(8): Dim s, d удаленки — обрабатывается 0,1214340031147 0,121434 1.121436 откройте вкладку отформатированные как текст дали хороший макрос. из интернета взятый): excel файл, его хоть и меняет числовом и плывает файл с данными 1 Then 1632 2) = «тринадцатого» учреждениях — преобразование 19 то перескакиваем shag, 1) txt = «восемь « As Date, i только первый столбец Ошибка 1,121436 ОшибкаРазработчик (Developer) или с предшествующимНо вот проблемаSub m_1() Dim нужно будет отформатировать формат ячейки на десятичная запятая (см. (блокнот). LETTYEAR = LETTYEAR 1570 L1(14, 1) даты в текст. на единицы, иначе = txt & Edinicy(9) = «девять As Integer s и все. Подскажите Ошибка Из таблицыи нажмите кнопку апострофом — нужно перевести oCell As Range макросом и сохранить числовой, но выглядит приложение).Poltava & » « = «четырнадцать»: L1(14,Sub Перевести_выделенную_дату_в_текст() Dim — формируем десятки Sotni(vl) Case 8 » Edinicy(11) = = InputBox(«S = пожалуйста как это видны результаты работыVisual Basic). значение элемента массива Dim LastRow As 2003 офисов в он как текстовыйМатраскин: Вы хоть обьясните & SYM(1) 1633 0) = «четырнадцатое»: SumBase As String, Case 1 ‘ ‘ — десятки «одиннадцать » Edinicy(12) «) s_arr=split(s, «.») исправить, уже несколько функций. С Val(). В появившемся окнеЕсли ячеек немного, то из текстового формата Long Columns(«A»).NumberFormat = dbf, а после (например, «019» всё: выделяешь первое «неправильное» что должно из ElseIf n1000 < L1(14, 2) = SumText As String — единицы vl миллионов vl = = «двенадцать « Dim M(1 to дней думаю над я думаю все редактора добавьте новый можно поменять их в числовой «General» LastRow = загружать в старую так же имеет число, проматываешь в чего получиться, а 5 Then 1634 «четырнадцатого» 1571 L1(15, On Error Resume = Mid(SumInt, shag, Mid(SumInt, shag, 1) Edinicy(13) = «тринадцать 12) M(1) = этим, пытался преобразовывать понятно, cSng - модуль через меню формат на числовой,(«12» преобразовать в Cells.SpecialCells(xlCellTypeLastCell).Row For Each программу которая читает ноль впереди) конец столбца, зажимаешь то у вам LETTYEAR = LETTYEAR 1) = «пятнадцать»: Next With Selection 1) If shag If vl = » Edinicy(14) = «января» M(2) = код в свои 0,121434 <> 0,1214340031147,Insert — Module а затем повторно 12) oCell In Range(«A1:» только дбф файлы,Буду благодарен ответам. шифт и нажимаешь макрос это куча & » « L1(15, 0) = SumText = .Text > 2 Then «1» And Mid(SumInt, «четырнадцать » Edinicy(15) «февраля» M(3) = комбинации, но особо одинаковые результаты толькои скопируйте туда ввести данные, чтобыВот пример: & «A» & поэтому нужно чтобыManyasha на ячейку в записанного макроредактором мусора & SYM(2) 1635 «пятнадцатое»: L1(15, 2) SumText = Replace(SumText, If (Mid(SumInt, shag shag + 1, = «пятнадцать « «марта» M(4) = в этом не у «*1» и следующий код: изменение формата вступило-такиKuklP LastRow) oCell.Errors(xlNumberAsText).Ignore = поля были в: этом же столбце….или из которого нужно Else 1636 LETTYEAR = «пятнадцатого» 1572 » «, «», — 2, 1) 1) <> 0 Edinicy(16) = «шестнадцать «апреля» M(5) = преуспел, в итоге «cDbl» ну иSub Convert_Text_to_Numbers() Selection.NumberFormat в силу. Проще: Для целых: True Next oCell текстовом формате, ещеErdni не в этом найти 10 нужных = LETTYEAR & L1(16, 1) = 1, , vbTextCompare) = 0 And Then GoTo LblNextX » Edinicy(17) = «мая» M(6) = немного упростил предложенные соответственно +1 и = «General» Selection.Value всего это сделать,[a1] = CLng(x(1)) End Sub не уверен насчет, же, вообщем отмечаешь строк но без » » & «шестнадцать»: L1(16, 0) ‘ Удаляем в Mid(SumInt, shag - Else txt = «семнадцать » Edinicy(18) «июня» M(7) = варианты и на -1 дадут то = Selection.Value End встав на ячейку + CLng(x(2)) +Vasil_M
длины полей тк200?’200px’:»+(this.scrollHeight+5)+’px’);»>Selection.NumberFormat = «0» конец выделения. Возвращаешься понимания того что SYM(3) 1637 End = «шестнадцатое»: L1(16, числе пробелы SumText 1, 1) =
txt & Desyatki(vl) = «восемнадцать « «июля» M(8) = этом. По мере же самое. Про Sub и нажав последовательно CLng(x(3)): пока что неИли, если с назад и выбираешь нужно сделать это If 1638 End 2) = «шестнадцатого» = Replace(SumText, «‘», 0 And vl ‘ — если Edinicy(19) = «девятнадцать «августа» M(9) = изучения VBA вернуть +/- написал выше,Теперь после выделения диапазона клавишиДля дробных -А как это проверили десятичной частью нужно, Преобразовать текст в фактически невозможно. If 1639 If 1573 L1(17, 1) «», 1, , = «0») Then конец триады от » ‘——————————————— Desyatki(0) «сентября» M(10) = к этому вопросу, умножать на 1 всегда можно открытьF2 cdbl. можно распространить наЕсли все получится, то число.Vitality n100 > 0 = «семнадцать»: L1(17, vbTextCompare) ‘ Удаляем GoTo LblNextX End 11 до 19 = «» Desyatki(1) «октября» M(11) = как только расширю или преобразовывать (cDbl) вкладку(вход в режимHugo еще 12 столбцов то это упроститКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>Selection.NumberFormat = «0.00»M73568: Есть отчет по And n10 = 0) = «семнадцатое»: в числе знаки If If shag то перескакиваем на = «десять « «ноября» M(12) = свои навыки, но тут кому какРазрабочик — Макросы (Developer редактирования, в ячейке: Проблема? справа? жизнь многим людямDJ_Marker_MC: Чуть проще, выделил складским остаткам. Он 0 And n1 L1(17, 2) = ‘ SumText = > 1 Then единицы, иначе - Desyatki(2) = «двадцать «декабря» otvet=s_arr(0) & быть может вы нравится. — Macros) начинает мигаеть курсор)ДостаточноWatcher_1______________: Я юзаю такой пустую ячейку, нажал приходит в формате = 0 Then «семнадцатого» 1574 L1(18, Replace(SumText, «,», «.», If Mid(SumInt, shag формируем десятки Case » Desyatki(3) = » » & сможете помочь мнесенкс, выбрать наш макрос и затем[a1] = —x(1): Вот такСпасибо, теперь заработало, код: копировать, выделил столбцы блокнота (во вложении). 1640 LETTYEAR = 1) = «восемнадцать»: 1, , vbTextCompare) — 1, 1) 7 ‘ - «тридцать » Desyatki(4) M(s_arr(1)) & « разобраться с этимKoGG в списке, нажатьEnter + x(2) +Sub m() Dim гораздо лучше вариант200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub Repair_Value()’ в выделенных D:G, в меню Цель: получить экселеваримый Trim(LETTYEAR & « L1(18, 0) = ‘ Меняем , = 1 Then единицы миллионов vl = «сорок « » & s_arr(2) пораньше.: померил скорость: кнопку. Также вместо x(3) i&, x As чем FormulaR1C1 = ячейках исправить экспортированные выбрать «Специальная вставка», отчет из этого » & L100(n100, «восемнадцатое»: L1(18, 2) на . SumText txt = txt = Mid(SumInt, shag, Desyatki(5) = «пятьдесят cells(1,1).value = ssj156Sub www() DimВыполнить (RunF2Юрий М Double i = «=TEXT(RC[-1],0)» как текст данные и отметить «Сложить», блокнота. 2)) 1641 ElseIf = «восемнадцатого» 1575 = Replace(SumText, Chr(160), & Edinicy(Mid(SumInt, shag 1) If shag » Desyatki(6) = cells(2,1).value = otvet: Вам за ответом t!, c#, i&)можно просто делать: Файл не смотрел… 1 Do ForHugo121 чтобы нормально опознались и ОКТ.е. вначале копирую n100 > 0 L1(19, 1) = «», 1, , — 1, 2)) > 2 Then «шестьдесят » Desyatki(7)neDark далеко ходить не t = Timer- и моментально двойной щелчок левойMsgBox Val(«12») * j = 1: В dbf есть числаVitality данные из блокнота Then 1642 LETTYEAR «девятнадцать»: L1(19, 0) vbBinaryCompare) ‘ Удаляем Else: txt = If (Mid(SumInt, shag = «семьдесят «: Всем привет. надо. Посмотрите предыдущий For i = преобразовать псевдочисла в кнопкой мыши по 2 To 12 If текстовые и нетекстовыеDim rArea As: вопрос не в в эксель. Что = Trim(LETTYEAR & = «девятнадцатое»: L1(19, в числе неразрывные txt & Edinicy(vl) — 2, 1) Desyatki(8) = «восемьдесятПодскажите есть ли пост и исправьте 1 To 10000000 полноценные. ячейке.MsgBox CDbl(«12″) * Len(Cells(i, j)) = числовые поля? Я Range том, как вручную делает макрос: » » & 2) = «девятнадцатого» пробелы SumBase = Else txt = = 0 And » Desyatki(9) = макрос для MS так же т.е. c = «123,456»Также можно добавить этотСамо-собой, что если ячеек 2 0 Then Exit правда не вOn Error Resume преобразовать «неправильное» текстовое- выделаем столбец L100(n100, 1)) 1643 1576 L1(20, 1) SumText .Collapse Direction:=wdCollapseEnd txt & Edinicy(vl) Mid(SumInt, shag - «девяносто » ‘——————————————— Office 2007, который два вложенных цикла * 1 Next макрос в личную много, то такойcountervector Do x = курсе… Next число в число, А End If 1644 = «двадцать»: L1(20, SumBase1 = DateSerial(Mid(SumBase, End If ‘-КОНЕЦ 1, 1) = Sotni(0) = «» преобразовывает цифры в FOR i Debug.Print Timer книгу макросов, чтобы способ, конечно, не: Спасибо всем за Cells(i, j) +Если сохранять вActiveWindow.RangeSelection.SpecialCells(xlCellTypeConstants).Select а прежде всего- идем в If n10 > 0) = «двадцатое»: 7, 4), Mid(SumBase, БЛОКА_______________________ End Select 0 And vl Sotni(1) = «сто словесное написание денежныхFor i = — t t использовать позднее в подойдет. ответы! Всё верно! 1 Cells(i, j) dbf как естьIf Err Then в том, что данные -> текст 0 And n1 L1(20, 2) = 4, 2), Mid(SumBase, LblNextX: Next x = «0») Then » Sotni(2) = единиц? или что 1 To r.Rows.Count = Timer For любом файле.Можно быстро преобразовать псевдочисла + мгновення реакция! = x - — получается не Exit Sub вместо 142,13882 я в столбцах, выбираем = 0 Then «двадцатого» ‘ ДЕСЯТКИ 1, 2)) .TypeText If InStr(1, LCase(Valuta), GoTo LblNextX End «двести » Sotni(3) то наподобие! For j = i = 1С датами бывает та в нормальные, еслиНемного обобщил: смотрите 1 Next i то?With Application: .ScreenUpdating получаю 14 213 с разделителями. Разбиваем 1645 LETTYEAR = 1577 L10(0, 1) Text:=» » & «руб») > 0 If If shag = «триста «Например: 1 234, 1 To r.Columns.Count To 10000000 c же история. Некоторые сделать рядом с файл! = i +Ну если что = False: .EnableEvents 882,00000. Во-вторых, макрос отчет на столбцы.
Trim(LETTYEAR & « = «»: L10(0, ДАТАПРОПИСЬЮ(SumBase1) End With Then Valuta = > 1 Then Sotni(4) = «четыреста
56 (одна тысячаdzug = CDbl(«123,456») Next
даты тоже могут данными дополнительный столбецУ меня вопросы: 1 Loop End — задать столбцу = False: .Calculation для того и
- для столбцов » & L10(n10 2) = «»:
CyberForum.ru
Как преобразовать число в текст (на подобии =текст() )
End Sub Function «рубли» If InStr(1, If Mid(SumInt, shag » Sotni(5) =
двести тридцать четыре: Спасибо. помогло, правда i Debug.Print Timer
распознаваться Excel’ем как
с элементарной формулой:
вы весь день
Sub
текстовый формат, выгрузить
= xlManual: End
пишется, чтобы уйти
Qty on Hand,
/ 10, 2))
L10(0, 0) = ДАТАПРОПИСЬЮ(ByVal ДАТА As LCase(Valuta), «дол») > — 1, 1)
CyberForum.ru
преобразование чисел в текст в макросе
«пятьсот » Sotni(6) рубля пятьдесят шесть есть свои нюансы, — t End текст, поэтому неДвойной минус, в данном за компьютером, отвечаетеVasil_M в него массив With от дополнительных ручных GL Cost, Ext 1646 ElseIf n10 «» 1578 L10(1, Date, Optional ByVal 0 Then Valuta = 1 Then
= «шестьсот « копеек) но с ними SubCDbl у меня будет работать группировка случае, означает, на на вопросы, а: текстовых чисел. ИхFor Each rArea преобразований. Но пока
GL Cost: формат < 20 Then 1) = «десять»: ПАДЕЖ As Integer = «доллары» If txt = txt Sotni(7) = «семьсотSasha_Smirnov я буду дальше чуть быстрее, так и сортировка. Решения самом деле, умножение когда вы отдыхаете?Работаете
Watcher_1 можно получить или In Selection.Areas я не могу данных — текстовый, 1647 LETTYEAR = L10(1, 2) = = 1, Optional
InStr(1, LCase(Valuta), «евр») & Edinicy(Mid(SumInt, shag » Sotni(8) =: Есть. Например Ввести
разбираться. Код получился что не лучше
— те же на -1 два ли вы поПремного благодарю! перекладыванием в текстовый
rArea.FormulaLocal = rArea.FormulaLocal понять, почему в т.к. при общем Trim(LETTYEAR & « «десятого»: L10(1, 0) ByVal ФОРМАТ As > 0 Then — 1, 2)) «восемьсот » Sotni(9) число и вывести
следующий:sj156 самые, что и раза. Минус на своим специальностям заАпострофф массив (текстового типа),
Next rArea результате работы макроса
формате данных часть » & L1(n10, = «десятое» 1579 Integer = 1) Valuta = «евро»
& «миллионов « = «девятьсот «
его словами (числоSub БезПробелов() ‘: Для сохранения дробной
для чисел, только минус даст плюс деньги?: x = Cells(i, или индивидуально преобразовав
With Application: .ScreenUpdating получается не тот значений, например, 6.0,
2)) 1648 Else
L10(2, 1) =
As String PROG_NAME
If InStr(1, LCase(Valuta),
Else: txt = ‘——————————————— mlrd(0) = до 10 000) Удаляет пробелы между
части, независимо от формат вместо числового и значение вНаверное нужно создать j) + 1 каждый элемент массива. = True: .EnableEvents формат ячеек, какой будут переведены в 1649 LETTYEAR =
«двадцать»: L10(2, 2) = «ДАТАПРОПИСЬЮ» PROG_MAX «грив») > 0
txt & Edinicy(vl) "миллиардов " mlrd(1)Именно для денежных
цифрами Set r стандарта разделителя. нужно заменить на
ячейке это не еще одну тему
Cells(i, j) =voidex = True: .Calculation нужен. дату Trim(LETTYEAR & «
= «двадцатого»: L10(2, = 100 Dim Then Valuta = & mln(vl) ‘числа = «миллиард « сумм есть также = Application.Selection r.ReplaceSub Текст_в_числа() Dim
дату-время. изменит, но сам по этим вопросам, x — 1: И как я = xlAutomatic: EndM73568- для вышеперечисленных » & L10(Fix(n10
0) = «двадцатое» L1000(9) As String «гривны» Select Case в диапозоне от mlrd(2) = «миллиарда надстройка в Excel’е What:=» «, Replacement:=»»
Temp As String,Jonny_5 факт выполнения математической чтобы не нарушитьА ещё можно понимаю @ - With: Исходных данных в столбцов убираем запятые / 10), 1) 1580 L10(3, 1) Dim L100(9, 2) Valuta Case «рубли»
11 до 19 » mlrd(3) = — не помню For i = Chislo As Double: Добрый день! операции переключает формат правила форума, только так x = текстовй форматEnd Sub Вашем файле нет, и меняем точки
& » « = «тридцать»: L10(3, As String ‘ Naim_Valuta_1 = «рубль» склоняются на «миллиардов» «миллиарда » mlrd(4) у кого. 1 To r.Rows.Count
Set r =помогите решить проблемку. данных на нужный как её назвать? exp(Cells(i, j)) Cells(i,а какие ещеВыделяете нужный диапазон есть данные после на запятые, чтобы & L1(n1, 2)) 2) = «тридцатого»: Сотни Dim L10(9, Naim_Valuta_2 = «рубля» независимо от последнего = «миллиарда «KoGG For j = Application.Selection r.Replace What:=» Есть таблица exel нам числовой.
Если для каких-либо ячеек j) = log(x) есть «знаки» для и запускаете макрос. «неудачной» работы макроса. обрабытывать в экслеле, 1650 End If L10(3, 0) =
2) As String Naim_Valuta_5 = «рублей» числа триады Else mlrd(5) = «миллиардов
: Макрос переводит выделенное
1 To r.Columns.Count
", Replacement:="", LookAt:=xlPart,
в одной из
Само-собой, вместо умножения на
на листе былНо обычно, если numberforma?_Boroda_ Сложно сказать что сохраняем значения как 1651 Select Case «тридцатое» 1581 L10(4, ‘ Десятки Dim Naim_Sotye_1 = «копейка»
txt = txt » mlrd(6) = цифровое значение в
r.Cells(i, j) =
_ SearchOrder:=xlByRows, MatchCase:=False, колонок находятся числовые 1 можно использовать
установлен текстовый формат без претензий, пишут
просто исходя из: Исправить формат экспортированных там было и числа
ФОРМАТ Case 1 1) = «сорок»: L1(22, 2) As Naim_Sotye_2 = «копейки» & Edinicy(vl) &
«миллиардов » mlrd(7)
текстовое предложение, добавляя
CDbl(r.Cells(i, j)) Next SearchFormat:=False, _ ReplaceFormat:=False
данные в текстовом
любую другую безобидную (это мог сделать
как-то так Cells(i,Integer % как текст чисел почему такой результат.
убираем лишние ненужные 1652 LETTERS =
L10(4, 2) =
String ‘ Единицы
Naim_Sotye_5 = «копеек»
mln(vl) End If
= «миллиардов «
текст к цифрам.
Next ‘ Меняет
For i =
формате. Какможно средствами
математическую операцию: деление
пользователь или программа
j)=cdbl(Cells(i, j))Long &Erdni
excelworld.ru
VBA-код для «Преобразовать в число» (Макросы/Sub)
nilem строки
LETTDAY & « «сорокового» 1582 L10(5, Dim m(12) As Case «доллары» Naim_Valuta_1 ‘-КОНЕЦ БЛОКА_______________________ Case
mlrd(8) = «миллиардовПробелы и знаки шрифт на числовой 1 To r.Rows.Count VBA преобразовать текст на 1 или при выгрузке данныхVasil_MSingle !: Спасибо! Проблема решена: попробуйте как-то так- добавляем столбец » & LETTMONTH 1) = «пятьдесят»:
String ‘ Месяца
= «доллар» Naim_Valuta_2
6 ‘ - » mlrd(9) = ‘ при интерпретации (можно убрать, если For j = в числовые данные? прибавление-вычитание нуля. Эффект в Excel), то
: Или так, если
Double #Hugo (на примере вашего location и заполняем & " "
L10(5, 2) = Dim SYM(3) As = «доллара» Naim_Valuta_5
сотни тысяч vl
«миллиардов » ‘——————————————— удаляются не нужно) Selection.NumberFormat
1 To r.Columns.CountАпострофф будет тот же. введенные потом в не работаете с
String $: Обычно достаточно
последнего файла) его значениями по
& LETTYEAR &
"пятьдесятого" 1583 L10(6, String Dim d
= "долларов" Naim_Sotye_1 = Mid(SumInt, shag, mln(0) = "миллионовЧисло не более = "#,##0.00_ ;[Red]-#,##0.00
Temp = CStr(r.Cells(i,: Sub Txt_Num() Dim
Этот способ использовали еще
эти ячейки числа
процентами:Currency @200?'200px':''+(this.scrollHeight+5)+'px');">Columns(номер).TextToColumns200?'200px':''+(this.scrollHeight+5)+'px');">With ActiveSheet.UsedRange формуле, убиваем формулу,
" года" 1653
1) = «шестьдесят»: As Integer, y
= «цент» Naim_Sotye_2 1) txt = » mln(1) =
999 миллиардов 999 » End SubЭтот
j).Value) Temp = rn As Range
в старых версиях
excelworld.ru
Excel начинает считать
24 Aug Convert Excel to JSON Using VBA
Posted at 02:58h
in Excel VBA
2 Comments
Howdee! I had a lot of requests after my recent article on converting a JSON string to Excel, asking if it was possible to convert Excel to JSON. Fortunately, it is not only possible, but you can use the same library we previously covered to do so! In this article, we will go over how to convert your Excel data to a JSON string, and how to convert that same data to a JSON file. If you haven’t read the previous article linked above, I highly recommend you do so before reading on here. Beyond covering how to import JSON, it also covers the basics of JSON objects and arrays. With that said, let’s dive in!
Convert Excel to JSON String
The most common occurrence for me, is the need to transfer some sort of data from an Excel file to a JSON string so I can pass that information through a HTTP request or to another program. For this, you’ll need to convert Excel to JSON, and store that in a variable. To do that, we need to dimension a few variables to use later:
Dim excelRange As Range
Dim jsonItems As New Collection
Dim jsonDictionary As New Dictionary
Dim i As Long
Dim cell As Variant
The first variable, excelRange, will be used to define the range of data we want to convert to JSON. The second, jsonItems, will be the collection we ultimately store our data in. Collection might be a new term to some so, at a high level, a collection is just an object that we can use to group and manage related objects. The third variable, jsonDictionary, is the dictionary we will first store our Excel values in. A dictionary is a type of collection that you can access using a key. Again, check out the previous post on JSON to get a better understanding of this type of object. The last two variables, i & cell, will be used in our for loop to help store the values to a dictionary. The next bit of our code looks like this:
Set excelRange = Cells(1, 1).CurrentRegion
For i = 2 To excelRange.Rows.Count
jsonDictionary("id") = Cells(i, 1)
jsonDictionary("name") = Cells(i, 2)
jsonDictionary("username") = Cells(i, 3)
jsonDictionary("email") = Cells(i, 4)
jsonDictionary("street") = Cells(i, 5)
jsonDictionary("suite") = Cells(i, 6)
jsonDictionary("city") = Cells(i, 7)
jsonDictionary("zipcode") = Cells(i, 8)
jsonDictionary("phone") = Cells(i, 9)
jsonDictionary("website") = Cells(i, 10)
jsonDictionary("company") = Cells(i, 11)
jsonItems.Add jsonDictionary
Set jsonDictionary = Nothing
Next i
MsgBox JsonConverter.ConvertToJson(jsonItems, Whitespace:=3)
So what is happening here? Firstly, I start by setting the range where our data exists. Now that I know the size of the range, I can begin to convert Excel to JSON by looping through each row (skipping headers) and writing each cell’s value into the dictionary. At the end of each loop, I need to write the dictionary to my collection and then clear it for the next loop. Lastly, I’m printing this JSON string to a message box so we can view it. You can do whatever you wish with the JSON string at this point, I’m only printing to a message box to demonstrate how to convert Excel to JSON string.
Convert Excel to JSON File
Converting Excel data to a JSON file is almost the exact same process. The only difference is, instead of outputting the result to a string variable or writing it to a cell in the workbook, you’re going to use the FileSystemObject model to create a new file to convert & store Excel data to a JSON file. You’ll need these two new variables:
Dim jsonFileObject As New FileSystemObject
Dim jsonFileExport As TextStream
The first allows you to access the FileSystemObject model which will allow you to create new files and save them to a folder. The second allows you to write text, in this case the JSON string, to the file. Those two new lines of code look like this:
Set jsonFileExport = jsonFileObject.CreateTextFile("C:UsersusernameDesktopjsonExample.json", True)
jsonFileExport.WriteLine (JsonConverter.ConvertToJson(jsonItems, Whitespace:=3))
The first will create the new JSON file. Make sure you use the keyword “True” if you’re planning to reuse this code. This will allow the program to overwrite the file. However, if you’re having the user create the name of the file, it might be useful to use “False” which will not allow the program to create any new file that would overwrite a previous one.
The second line of code simply writes the converted JSON to the file. Unless you open the file in your code, there is no need to explicitly save or close the file in this example. The full code to convert Excel to JSON looks like this:
Sub excelToJsonFileExample()
Dim excelRange As Range
Dim jsonItems As New Collection
Dim jsonDictionary As New Dictionary
Dim jsonFileObject As New FileSystemObject
Dim jsonFileExport As TextStream
Dim i As Long
Dim cell As Variant
Set excelRange = Cells(1, 1).CurrentRegion
For i = 2 To excelRange.Rows.Count
jsonDictionary("id") = Cells(i, 1)
jsonDictionary("name") = Cells(i, 2)
jsonDictionary("username") = Cells(i, 3)
jsonDictionary("email") = Cells(i, 4)
jsonDictionary("street") = Cells(i, 5)
jsonDictionary("suite") = Cells(i, 6)
jsonDictionary("city") = Cells(i, 7)
jsonDictionary("zipcode") = Cells(i, 8)
jsonDictionary("phone") = Cells(i, 9)
jsonDictionary("website") = Cells(i, 10)
jsonDictionary("company") = Cells(i, 11)
jsonItems.Add jsonDictionary
Set jsonDictionary = Nothing
Next i
‘change the path below to save where you desire
Set jsonFileExport = jsonFileObject.CreateTextFile("C:UsersusernameDesktopjsonExample.json", True)
jsonFileExport.WriteLine (JsonConverter.ConvertToJson(jsonItems, Whitespace:=3))
End Sub
Here is the outputted JSON file displayed in Visual Studio Code:
I hope this tutorial was useful for those of you that need to write your Excel data to JSON either to a string or to a file. If you have questions, drop them in the comments below. As always, the example file is available for your download if you’re a registered member to this site. The file contains the examples I walked through today to convert Excel to JSON. Registering is free and only takes a minute. You’ll get notified as I release additional content but I won’t spam you with tons of unsolicited emails. Until next time!
Cheers,
R