Excel vba преобразование строки в число

Функция VAL в VBA Excel или как преобразовать TextBox в число (цифру).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Excel vba преобразование строки в число

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

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

expression
Обязательный. Любое выражение исходного типа данных.

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

1 Дробные части могут быть подчиняться специальному типу округления под названием банковское округление. См. примечания для дополнительных сведений.

Как правило предпочтительнее использовать функции преобразования типа Visual Basic, чем методы .NET Framework, например ToString() в классе Convert или в отдельном типе структуры или класса. Функции языка Visual Basic предназначены для оптимального взаимодействия с Visual Basic, и они также сделают исходный код короче и облегчат его чтение. Кроме того методы преобразования .NET Framework не всегда получают тот же результат, что функции Visual Basic, например при преобразовании Boolean к Integer . Дополнительные сведения см. в разделе Устранение неполадок, связанных с типами данных.

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

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

Дробная часть. При преобразовании нецелого значения к целочисленному типу функции преобразования целых чисел ( CByte , CInt , CLng , CSByte , CShort , CUInt , CULng и CUShort ) удаляют дробную часть и округляют значение до ближайшего целого числа.

Если дробная часть равна точно 0,5, то функции преобразования целых чисел округлят его до ближайшего четного целого числа. Например, 0,5 округляется до 0, а 1,5 и 2,5 округляются до 2. Это иногда называется банковским округлением, и его целью является компенсация сдвигов, которые могут накапливаться при сложении многих таких чисел.

Читать еще:  Excel выравнивание ячейки по тексту в

CInt и CLng отличаются от функций Int и Fix, которые вместо округления отсекают дробную часть числа. Кроме того Fix и Int всегда возвращают значение того же типа данных, что и переданное значение.

Преобразования даты/времени. Функция IsDate используется для определения возможности преобразования значения в дату и время. CDate распознает литералы даты и литералы времени, но не числовые значения. Чтобы преобразовать значение Date Visual Basic 6.0 к Date Visual Basic 2005 или более поздних версий, можно использовать метод DateTime.FromOADate.

Нейтральные значения даты/времени. Тип данных Date всегда содержит и дату, и время. При преобразовании типов в Visual Basic нейтральным значением даты считается 1/1/1 (1 января 1 года), а нейтральным значением времени — 00:00:00 (полночь). Если значение с типом Date преобразуется в строку, функция CStr не включает нейтральные значения в конечную строку. Например, при преобразовании значения #January 1, 0001 9:30:00# в строку, будет возвращен результат «9:30:00»; дата отбрасывается. При этом сведения о дате останутся в исходном значении Date и могут быть извлечены с помощью таких функций, как DatePart.

Учет языковых и региональных параметров. Функции преобразования типов, включающие строки, выполняют преобразования на основе текущих языковых и региональных параметров для приложения. Функция CDate распознает форматы даты согласно региональным параметрам системы. Необходимо предоставить день, месяц и год в правильном порядке для имеющихся региональных настроек, в противном случае дата может интерпретироваться неправильно. Полный формат даты не распознается, если он содержит строковое значение дня недели, например «Wednesday».

Если требуется преобразовать в или из строкового представление значения в формате, отличном от задаваемого языка, то невозможно использовать функции преобразования типа Visual Basic. Чтобы сделать это, используйте методы ToString(IFormatProvider) и Parse(String, IFormatProvider) для этих типов значений. Например, используйте Double.Parse при преобразовании строки к Double и используйте Double.ToString при преобразовании значения из типа Double в строку.

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

Для сравнения CType с другими зарезервированными словами преобразования типов см. Оператор DirectCast и Оператор TryCast.

В следующем примере для преобразования к Boolean используется функция CBool . Если результатом вычисления выражения является ненулевое значение, то CBool возвращает True ; в противном случае она возвращает False .

В следующем примере для преобразования к Byte используется функция CByte .

В следующем примере для преобразования первого символа выражения String к типу Char используется функция CChar .

Входным аргументом CChar должен быть тип данных Char или String . Невозможно использовать функцию CChar для преобразования числа в символ, поскольку функция CChar не может принимать данные числовых типов. В этом примере получается число, представляющее кодовую позицию (код символа), которое преобразуется в соответствующий символ. Использует функцию InputBox для получения строки цифр, CInt для преобразования строки к типу Integer , а ChrW для преобразования строки к типу Char .

В следующем примере для преобразования строк к Date используется функция CDate . Как правило, не рекомендуется жестко кодировать дату и время в виде строк (как показано в этом примере). Вместо этого используйте литералы даты и времени, например #Feb 12, 1969# и #4:45:23 PM#.

Vba преобразовать строку в int, если строка — это число

Мне нужно преобразовать строку, полученную из excel, в VBA в interger. Для этого я использую CInt(), который работает хорошо. Однако есть вероятность, что строка может быть чем-то иным, чем числом, в этом случае мне нужно установить целое число в 0. В настоящее время у меня есть:

Читать еще:  Как в эксель открыть скрытые строки

Проблема в том, что я не могу предсказать все возможные числовые строки, которые могут быть в этой ячейке. Есть ли способ, который я могу сказать, чтобы преобразовать, если это целое число и установлено в 0, если нет?

Используйте IsNumeric. Он возвращает true, если в противном случае это число или false.

Передать в long или cast to int, помнить следующее.

Эти функции являются одной из функций представления в Excel VBA, которые зависят от региональных настроек системы. Поэтому, если вы используете запятую в своем двойном, как в некоторых странах Европы, вы испытаете ошибку в США.

Например, в европейской версии excel версии 0,5 будет хорошо работать с CDbl(), но в US-версии это приведет к 5. Поэтому я рекомендую использовать следующую альтернативу:

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

Попробуйте следующее: currentLoad = ConvertToLongInteger(oXLSheet2.Cells(4, 6).Value) с этой функцией:

Я выбрал Long (Integer) вместо простого Integer, потому что минимальный/максимальный размер Integer в VBA является crummy (min: -32768, max: +32767). Обычно для работы с электронными таблицами существует целое число за пределами этого диапазона.

Вышеприведенный код может быть изменен, чтобы обрабатывать преобразование из строки в целые числа, в-Currency (с использованием CCur()), to-Decimal (с использованием CDec()), to-Double (с использованием CDbl()) и т.д. Просто замените функцию преобразования (CLng). Измените возвращаемый тип функции и переименуйте все вхождения функциональной переменной, чтобы все было согласовано.

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

Каждая функция приводит выражение к определенному тип данных.

Обязательный аргумент выражениеаргумент — это любое строковое выражение или числовое выражение.

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

Тип возвращаемого значения

Диапазон аргумента выражение

Любое допустимое строковое или числовое выражение.

От -922 337 203 685 477,5808 до 922 337 203 685 477,5807.

Любое допустимое выражение даты.

От -1,79769313486231E308 до
-4,94065645841247E-324 для отрицательных значений и от 4,94065645841247E-324 до 1,79769313486232E308 для положительных.

+/-79 228 162 514 264 337 593 543 950 335 для чисел без дробной части. Для чисел с 28 десятичными знаками допустимый диапазон составляет
+/-7,9228162514264337593543950335. Наименьшее допустимое ненулевое число — 0,0000000000000000000000000001.

От -32 768 до 32 767, дробная часть округляется.

От -2 147 483 648 до 2 147 483 647, дробная часть округляется.

От -3,402823E38 до -1,401298E-45 для отрицательных значений и от 1,401298E-45 до 3,402823E38 для положительных.

Результат, возвращаемый функцией CStr, зависит от аргумента выражение.

Тот же диапазон, что и Double для чисел. Тот же диапазон, что и в качестве строки для нечисловых значений.

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

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

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

Если дробная часть целого числа строго равна 0,5, функции CInt и CLng всегда округляют результат до ближайшего четного числа. Например, 0,5 округляется до 0, а 1,5 — до 2. В отличие от функций CInt и CLng, в функциях Fix и Int дробная часть не округляется, а отбрасывается. Кроме того, функции Fix и Int всегда возвращают значение того же типа, что и переданное им выражение.

Читать еще:  Excel условное форматирование строки по значению ячейки

Для определения возможности преобразования даты в дату или время используется функция IsDate. Функция CDate распознает литералы даты и времени, а также некоторые числа, которые находятся в диапазоне допустимых дат. При преобразовании числа в дату преобразуется целая часть числа. Дробная часть преобразуется во время суток, начиная с полуночи.

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

Функция CVDate предназначена для обеспечения совместимости с предыдущими версиями Visual Basic. Синтаксис функции CVDate идентичен синтаксису функции CDate, однако функция CVDate возвращает не результат типа Date, а результат типа Variant с подтипом Date. Поскольку теперь реализован встроенный тип Date, необходимость в функции CVDate отпадает. Того же результата можно добиться, преобразовав выражение в тип Date и присвоив это значение переменной типа Variant. Этот способ позволяет преобразовать все прочие встроенные типы в эквивалентные им подтипы Variant.

Примечание: Функция CDec не возвращает отдельный тип данных. Вместо этого она всегда возвращает результат типа Variant, значение которого преобразовано в подтип Decimal.

vba преобразовать строку в int, если строка — это число — vba

Мне нужно преобразовать строку, полученную из excel, в VBA в interger. Для этого я использую CInt(), который работает хорошо. Однако есть вероятность, что строка может быть чем-то иным, чем числом, в этом случае мне нужно установить целое число в 0. В настоящее время у меня есть:

Проблема в том, что я не могу предсказать все возможные числовые строки, которые могут быть в этой ячейке. Есть ли способ, который я могу сказать, чтобы преобразовать, если это целое число и установлено в 0, если нет?

  • 2
  • 5
  • 4 окт 2019 2019-10-04 08:35:34
  • Captastic

Вот три функции, которые могут быть полезны. Сначала проверяет строку для правильного числового формата, вторая и третья функции преобразуют строку в Long или Double.

  • 4 окт 2019 2019-10-04 08:35:36
  • Doug

Чтобы поставить его на одну строку:

  • 4 окт 2019 2019-10-04 08:35:36
  • ray

Попробуйте следующее: currentLoad = ConvertToLongInteger(oXLSheet2.Cells(4, 6).Value) с этой функцией:

Я выбрал Long (Integer) вместо простого Integer, потому что минимальный/максимальный размер Integer в VBA является crummy (min: -32768, max: +32767). Обычно для работы с электронными таблицами существует целое число за пределами этого диапазона.

Вышеприведенный код может быть изменен, чтобы обрабатывать преобразование из строки в целые числа, в-Currency (с использованием CCur()), to-Decimal (с использованием CDec()), to-Double (с использованием CDbl()) и т.д. Просто замените функцию преобразования (CLng). Измените возвращаемый тип функции и переименуйте все вхождения функциональной переменной, чтобы все было согласовано.

  • 4 окт 2019 2019-10-04 08:35:35
  • Isaac Comer-Wyrd

Передать в long или cast to int, помнить следующее.

Эти функции являются одной из функций представления в Excel VBA, которые зависят от региональных настроек системы. Поэтому, если вы используете запятую в своем двойном, как в некоторых странах Европы, вы испытаете ошибку в США.

Например, в европейской версии excel версии 0,5 будет хорошо работать с CDbl(), но в US-версии это приведет к 5. Поэтому я рекомендую использовать следующую альтернативу:

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

Похожие статьи

Ссылка на основную публикацию
Похожие публикации
Adblock
detector