Excel преобразовать его vba

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

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

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

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

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

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

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

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

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

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

Функция CBool

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

Dim a

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

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

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

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

Dim a, b, c

a = «Test1»

b = «Test2»

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

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

Функция CByte

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

Dim a, b, c

a = 654

b = 3.36

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

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

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

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

Функция CCur

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

Dim a, b, c

a = 254.6598254

b = 569.2156843

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

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

Функция CDate

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

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

a = «28.01.2021»

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

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

Dim a

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

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

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

Функция CDbl

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

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

a = «45,3695423»

b = «548955,756»

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

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

Функция CDec

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

Dim a As String, b As Double, c

a = «5,9228162514264337593543950335»

b = 5.92281625142643

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

Dim a As Double, b As String, c

a = 4.2643E14

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

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

Функция CInt

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

Dim a As String, b As Integer

a = «2355,9228»

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

Функция CLng

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

Dim a As Date, b As Long

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

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

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

Функция CSng

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

Dim a As String, b As Single

a = «3,2365625106»

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

Функция CStr

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

Dim a As Single, b As String

a = 5106.23

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

Функция CVar

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

Dim a As Double, b As String, c

a = 549258.232546

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

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

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

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


Содержание

  1. Type conversion functions
  2. Syntax
  3. Return types
  4. Remarks
  5. CBool function example
  6. CByte function example
  7. CCur function example
  8. CDate function example
  9. CDbl function example
  10. CDec function example
  11. CInt function example
  12. CLng function example
  13. CSng function example
  14. CStr function example
  15. CVar function example
  16. See also
  17. Support and feedback
  18. Метод Application.ConvertFormula (Excel)
  19. Синтаксис
  20. Параметры
  21. Возвращаемое значение
  22. Примечания
  23. Пример
  24. Поддержка и обратная связь
  25. Функции преобразования типов
  26. Синтаксис
  27. Возвращаемые типы
  28. Примечания
  29. Пример функции CBool
  30. Пример функции CByte
  31. Пример функции CCur
  32. Пример функции CDate
  33. Пример функции CDbl
  34. Пример функции CDec
  35. Пример функции CInt
  36. Пример функции CLng
  37. Пример функции CSng
  38. Пример функции CStr
  39. Пример функции CVar
  40. См. также
  41. Поддержка и обратная связь

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
Регистрация: 16.12.2016

#1

05.02.2018 12:20:04

Добрый день, хочу записать макрос преобразования книги из xls в xlsx.
Для того, чтобы изменения во время преобразования вступили в силу и можно было пользоваться всеми возможностями excel предалагает закрыть и заново открыть файл в автоматическом порядке

Вот что записал макрорекодер:

Код
Sub Преобразование()
    ActiveWorkbook.SaveAs Filename:= "С:test.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False ' 1-й этап - сохранение файла в формате xlsx
    Workbooks.Open Filename:= "С:test.xlsx" ' 2-й этап открытие преобразованного файла
End Sub

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

Пытался использовать ACTIVEBOOK.PATH & ACTIVEBOOK.NAME но файл сохраняется с расширением xls, т.к. видимо name включает и расширение
Также не знаю как открыть только преобразованный и закрытый файл, во второй части макроса.
Поэтому прошу помощи =)

Изменено: g.tomilin05.02.2018 17:27:19

Что такое всё?

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Изменено: Jack Famous05.02.2018 12:24:12

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Ігор Гончаренко

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

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

#3

05.02.2018 12:43:22

Цитата
Но задача в том, что файлы могут открывать в разных директориях и иметь разные имена

каким способом планируете выбирать файлы?

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Alemox

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

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

тогда диалоговое окно по выбору файлов с последующим их открытием и пересохранением в нужное расширение.

Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.

 

g.tomilin

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

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

Ігор Гончаренко,
Я использую надсройку в которой у меня коллекция макросов =)
Соотвественно файл открывается вручную а потом через надстройку с ним проводятся манипуляции в т.ч. преобразование формата.

 

RAN

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

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

#6

05.02.2018 17:20:22

Цитата
g.tomilin написал:
Соотвественно файл открывается вручную а потом через надстройку

Тады в надстройку код

Код
Sub qq()
    Dim oldFName$
    oldFName = ActiveWorkbook.FullName
    ActiveWorkbook.SaveAs oldFName & "x", 51
    Kill oldFName
End Sub
 

g.tomilin

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

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

RAN,  только начинаю изучать vba, и у меня вопрос, я так понимаю представленный макрос просто добавляет к ActiveWorkbook.FullName ,букву «x» ?
Но цель не просто поменять расширение внешне, а преобразовать файл.

В т.ч. для этого макрорекодер указывает FileFormat:=xlOpenXMLWorkbook
Например при сохранении файла в формате Excel 97-2003 FileFormat:=xlExcel8

 

RAN

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

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

g.tomilin, вы изложили хотелку.
Я предложил код.
То, что предложенный код не соответствует вашим представлениям о «правильном коде», проблемы не мои.
F1 в помощь.

 

_Igor_61

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

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

#9

06.02.2018 07:45:29

Цитата
g.tomilin написал:
цель не просто поменять расширение внешне, а преобразовать файл.

Внимательно посмотрите на код от RAN, а потом прочитайте это:

Цитата
These are the main file formats in Excel 2007-2010:
51 = xlOpenXMLWorkbook (without macro’s in 2007-2010, xlsx)
 

g.tomilin

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

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

RAN, =)) Спасибо, я же говорю только начинаю изучать. увидел 51 но даже не подумал что в ней зашифрован целый мир  :oops:

Осталось только закрыть и открыть книгу, т.к. у преобразованной книги остается режим совместимости
Пытался через Workbooks.Open Filename:=activebook.Path & activebook.Name
выдал ошибку 424

_Igor_61, а где можно помотреть весь перечень таких цифровых комбинаций для VBA?

Изменено: g.tomilin06.02.2018 09:16:03

 

RAN

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

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

#11

06.02.2018 09:02:58

Цитата
RAN написал:
F1 в помощь.

:)

 

_Igor_61

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

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

#12

06.02.2018 09:35:31

Посмотреть наверное где-то в справке или в интернете. Я об этом от Юрия М. узнал в одной из тем:

Цитата
// константы форматов 2003
//  xlCSVWindows = 23;
//  xlDBF2 = 7;
//  xlDBF3 = 8;
//  xlDBF4 = 11;
//  xlDIF = 9;
//  xlExcel9795 = 43;
//  xlTextWindows = 20;
//  xlUnicodeText = 42;
//  xlWebArchive = 45;
//  xlXMLSpreadsheet = 46;
//  xlXMLData = 47;

// основные константы 2007
//  These are the main file formats in Excel 2007-2010:
//  51 = xlOpenXMLWorkbook (without macro’s in 2007-2010, xlsx)
//  52 = xlOpenXMLWorkbookMacroEnabled (with or without macro’s in 2007-2010, xlsm)
//  50 = xlExcel12 (Excel Binary Workbook in 2007-2010 with or without macro’s, xlsb)
//  56 = xlExcel8 (97-2003 format in Excel 2007-2010, xls)

//  57 = PDF
//  60 = xlOpenDocumentSpreadsheet  OpenDocument Spreadsheet

 

g.tomilin

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

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

RAN, нашел кодировки форматов, увидел возможные варианты причин ошибки, но к сожалению через ф1 не понять как закрыть и открыть книгу =)

Изменено: g.tomilin06.02.2018 10:19:19

 

g.tomilin

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

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

#14

06.02.2018 10:21:34

_Igor_61, да я в справке просто 51 набрал и он выдал —

Скрытый текст

Что такое всё?

 

g.tomilin

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

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

Есть ещё какие-нибудь предложения по вопросу? =)
Как закрыть а затем открыть книгу?

 

sokol92

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

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

#16

06.02.2018 17:31:04

Цитата
_Igor_61 написал:
Посмотреть наверное где-то в справке или в интернете. Я об этом от Юрия М. узнал в одной из тем:

Тут

.

Владимир

 

так:
workbook.close false

workbooks.open(«полный путь к файлу»)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

g.tomilin

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

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

Ігор Гончаренко, проблема в том что путь как и имя файла неконстанта.
Этот макрос встроен в надстройку — я открываю любой файл и применяю в нему определенный набор изменений в т.ч. преобразование в xlsx.
Соответственно нужно что-то вроде open recent file
Т.е. происходит сохранение/преобразование затем требуется заново открыть файл — по процедуре close затем open.

 

Дмитрий Щербаков

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

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

Профессиональная разработка приложений для MS Office

#19

07.02.2018 09:27:20

Цитата
g.tomilin написал:
путь как и имя файла неконстанта

ну да, ну да. И Вы вообще не знаете куда сохраняли и как назвали файл? А как же Вы тогда кодом его сохраняете, позвольте узнать? Не думаю, что все это происходит при помощи двух неизвестных. Скорее всего это какие-то переменные, которые никто не мешает использовать не только для сохранения, но и для открытия.
Чтобы не гадать и не рассказывать, что именно Вы не понимаете в этом процессе — приложите нормальный и реальный код сохранения.
И по опыту: чтобы убрать режим совместимости необходимо, чтобы были закрыты ВСЕ файла с расширением xls. Если хоть один будет открыт — режим совместимости будет активен.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Дмитрий Щербаков

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

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

Профессиональная разработка приложений для MS Office

#20

07.02.2018 09:39:38

Вот, накидал код — должен работать:

Код
Sub SaveAndOpen()
    Dim sfn As String, sp As String
    'получаем путь к папке активной книги
    sp = ActiveWorkbook.Path
    'добавляем слеш в конце папки, если его нет
    If Right(sp, 1) <> Application.PathSeparator Then
        sp = sp & Application.PathSeparator
    End If
    'запоминаем имя активной книги
    sfn = ActiveWorkbook.Name
    'если книга не в формате xlsx
    If ActiveWorkbook.FileFormat <> 51 Then
        sfn = sfn & "x"
        ActiveWorkbook.SaveAs sp & sfn, 51
        Application.Workbooks.Open sp & sfn, False
    End If
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

g.tomilin

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

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

#21

07.02.2018 09:51:40

Дмитрий Щербаков,
Спасибо за наводку =))) Я только учюсь поэтому ещё мозг не так работает.

Вот код, может конечно не идеальный но работает. добавил к коду

Код
Private Sub CommandButton1_Click()
    Dim oldFName$
    Dim newFName As String
    Dim PathCurrentBook As String
    oldFName = ActiveWorkbook.FullName
    newFName = oldFName & "x"
    PathCurrentBook = ActiveWorkbook.Path
    ActiveWorkbook.SaveAs oldFName & "x", 51
    Kill oldFName
    ActiveWorkbook.Close
    Workbooks.Open Filename:=newFName
End Sub

По поводу множества открытых xls тоже спасибо, буду иметь в виду. Но в практике обычно открывается один файл с ним происходят преобразования, он анализируется, после уже открывается другой файл и т.д.
Возможно в будущем возникнет жделание группового одномоментного преобразования.

Всем спасибо (особоенно RAN, Ігор Гончаренко, Дмитрий Щербаков, )! Решение найдено.

ps Дмитрий Щербаков протестирую ваш код.

Дмитрий Щербаков, с if красивее и удобнее, спасибо =)

Изменено: g.tomilin07.02.2018 11:09:52

Что такое всё?

 

g.tomilin

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

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

#22

07.02.2018 11:28:36

RAN,
подскажите пожалуйста что значит значек $ в

Код
Dim oldFName$

Что такое всё?

 

эквивалентно Dim OldName as String
есть у Basic такая возможность — указать тип переменной, используя последним символом в имени переменной предусмотренные для этого символы
читайте

тут

Изменено: Ігор Гончаренко07.02.2018 13:06:19

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

g.tomilin

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

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

Ігор Гончаренко,Спасибо за объяснение все понятно.
Это делается для краткости?

 

RAN

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

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

#25

07.02.2018 18:47:35

Именно.

PS

Цитата
g.tomilin написал:
добавил к коду

Не могли бы вы прокомментировать, что делают, и зачем сделаны добавки?

Изменено: RAN07.02.2018 18:53:47

 

g.tomilin

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

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

#26

08.02.2018 09:15:57

RAN, не верно скопировал

Private Sub CommandButton1_Click()    
   Dim oldFName$
   Dim newFName As String — содержит путь в новому файл чтобы потом его открыть
   Dim PathCurrentBook As String — забыл что FullName содержит ещё и путь поэтому добавлял переменную
   oldFName = ActiveWorkbook.FullName
   newFName = oldFName & «x»записываем новое имя путь
   PathCurrentBook = ActiveWorkbook.Path — аналогично вышеуказанной ошибке
   ActiveWorkbook.SaveAs oldFName & «x», 51
   Kill oldFName
   ActiveWorkbook.Closeэто для закрытия книги, как я писал для того чтобы снять режим совместимости
   Workbooks.Open Filename:=newFName — ну и открыть собственно новый файл
End Sub

Т.е. если просто пересохранить файл в xlsx то остается режим совместимости, поэтому нужно закрыьт и заново открыть преобразованную книгу.

Изменено: g.tomilin08.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_1​Hugo121​

​: Нужно какую нибудь​​.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 End​Vasil_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() Dim​​Jonny_5​​Попробовал записать макрос​​ c неправильной десятичной​
​ GL Cost?​ Mid(LETTDAY, 2) &​ «девяностого» ‘ СОТНИ​ m(1) = «января»​ Naim_Valuta_2 = «гривны»​ txt = txt​ mln(9) = «миллионов​

​ Удаляем в числе​​ на 0. Как​ отбрасывает дробную часть.​Если стоит автофильтр​скопируйте ее​ приводит к большому​ i&, x As​: Добрый день!​

​ используя эту функцию​​ запятой и F9​SkyPro​ » » &​ 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​​ Есть таблица exel​ActiveCell.FormulaR1C1 = «=TEXT(RC[-1],0)»не​
​ числа.​ строки мешают?​ » & LETTYEAR​ 2) = «»​ m(4) = «апреля»​ Naim_Sotye_2 = «копейки»​ триады от 11​ tys(1) = «тысяча​ 1, , vbTextCompare)​ пост.​ «открыть» для себя​

​ итогов на ячейку​​ и поменяйте у​
​перестает нормально работать сортировка​ j = 1​ в одной из​ совсем то​

​M73568​​200?’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» End​200?’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 For​Jonny_5​

planetaexcel.ru

Преобразование чисел-как-текст в нормальные числа

​Хотя непонятно зачем​ в ячейку запятую,​ устанавливаю числовой формат​Что ж, посмотрим​ = «четыреста»: L100(4,​ 1) = «»:​ Valuta Naim_Valuta_5 =​ 2, 1) =​ = «тысяч «​ числе неразрывные пробелы​ 75 To 109​ пользовался просто макрорекодером,​ Do x =​Ctrl+Alt+V​

Число как текст в Excel

​ число-как-текст различаются:​ 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 Sub​Jonny_5​Hugo121​на:​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 & «)»​​Если псеводчисла, которые надо​ правой кнопкой мыши,​Стоит автофильтр. Необходимо:​​ ячейки становится не​​ текст ,тоесть excel​​FieldInfo:=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​ а фича», конечно,​ после сканера. Set​dzug​ CStr(myvalue) End Sub​.Columns(«D:D»).Replace What:=»,», Replacement:=»»​SkyPro​String $​ = «шеститысячного» 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​
​ в ячейку А2​Sub БезПробелов() ‘​ и ничего не​Данные (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.Replace​Dim 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 итд..​: Теперь всё работает,​SkyPro​Vitality​ = «тысяч» 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​ по умолчанию 9​Erdni​ подробно описали ситуацию​ запуске макроса числовые​ ‘ число 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 As​Sub дата() 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 специально для​ имеющиеся сейчас в​Преобразовать в число (Convert​countervector​ надо открывать: ни​ как писать это​ слева в самой​ данные листа ориджинал​ 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​ макроса. Нажмите сочетание​Файл — Параметры -​ ответов в теме​Busine2009​voidex​Selection.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 = s​sj156​Sub www() Dim​Выполнить (Run​F2​Юрий М​ 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 For​Hugo121​ чтобы нормально опознались​ и ОК​Т.е. вначале копирую​ 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.Replace​Sub Текст_в_числа() Dim​

​ дату-время.​​ изменит, но сам​ по этим вопросам,​ x — 1​: И как я​ = xlAutomatic: End​M73568​- для вышеперечисленных​ » & 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 можно использовать​wink

​ установлен текстовый формат​​ без претензий, пишут​
​просто исходя из​: Исправить формат экспортированных​ там было и​ числа​
​ ФОРМАТ 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_M​Single !​: Спасибо! Проблема решена​: попробуйте как-то так​- добавляем столбец​ » & 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(номер).TextToColumns​200?'200px':''+(this.scrollHeight+5)+'px');">With ActiveSheet.UsedRange​ формуле, убиваем формулу,​
​ " года" 1653​

​ 1) = «шестьдесят»:​ As Integer, y​

​ = «цент» Naim_Sotye_2​​ 1) txt =​ » mln(1) =​

​ 999 миллиардов 999​​ » End SubЭтот​:D

​ j).Value) Temp =​​ rn As Range​
​ в старых версиях​

excelworld.ru

​ Excel начинает считать​

convert json to 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.

excel to json

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:

convert excel to json

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

Понравилась статья? Поделить с друзьями:
  • Excel преобразовать его pdf
  • Excel преобразовать его jpg
  • Excel преобразовать его jpeg
  • Excel преобразовать его html
  • Excel преобразовать его dbf