Tooprogram.ru

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

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

На этом шаге мы перечислим функции преобразования форматов .

Преобразование строки в число и обратно осуществляют следующими функциями.

Таблица 1. Преобразование строки в число и обратно
ФункцияНазначение
Val ( строка )Возвращает числа, содержащиеся в строке, как числовое значение соответствующего типа
Str ( число )Возвращает значение типа Variant (String) , являющееся строковым представлением числа

В качестве допустимого десятичного разделителя функция Str воспринимает только точку. При наличии другого десятичного разделителя (например, запятой) для преобразования чисел в строки следует использовать функцию CStr , указанную в конце этого шага.

Чтобы представить числовое значение как дату, время, денежное значение или в специальном формате, следует использовать функцию Format .

Функция Format возвращает значение типа Variant (String) , содержащее выражение, отформатированное согласно инструкциям, заданным в описании формата. Синтаксис:

При построении пользовательского числового формата возможно использование следующих символов.

Таблица 2. Символы, используемые в числовом формате
СимволНазначение
Резервирует позицию цифрового разряда. Отображает цифру или нуль. Если у числа, представленного аргументом, есть какая-нибудь цифра в той позиции разряда, где в строке формата находится 0, функция отображает эту цифру аргумента, если нет — в этой позиции отображается нуль
#Резервирует позицию цифрового разряда. Отображает цифру или ничего не отображает. Если у числа, представленного аргументом, есть какая-нибудь цифра в той позиции разряда, где в строке формата находится #, функция отображает эту цифру аргумента, если нет — в исходной позиции не отображается ничего. Действие данного символа аналогично действию 0, за исключением того, что лидирующие нули не отображаются
. ( точка )Резервирует позицию десятичного разделителя. Указание точки в строке формата определяет, сколько разрядов необходимо отображать слева и справа от десятичной точки
%Резервирует процентное отображение числа
,Разделитель разряда сотен от тысяч
:Разделитель часов, минут и секунд в категории форматов Время (Time)
/Разделитель дня, месяца и года в категории форматов Дата (Date)
E+, E-, e+, e-Разделитель мантиссы и порядка в экспоненциальном формате

Кроме функций Val и Str в VBA имеются следующие функции преобразования типов выражений из данного в указанный.

Таблица 3. Функции преобразования форматов
ФункцияТип, в который преобразуется выражение
CBool ( Выражение )Boolean
CByte ( Выражение )Byte
CCur ( Выражение )Currency
CDate ( Выражение )Date
СDbl ( Выражение )Double
CDec ( Выражение )Decimal
CInt ( Выражение )Integer
CLng ( Выражение )Long
CSng ( Выражение )Single
CVar ( Выражение )Variant
CStr ( Выражение )String

На следующем шаге мы рассмотрим функции обработки строк .

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

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

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

Читать еще:  Xml документ word

Рассмотрим пример кода с данной функцией (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
  6. If i > b = True Then MsgBox («Первое число больше «)
  7. End Sub

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

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

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

Применим функцию 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
  6. If i > b = True Then MsgBox («Первое число больше «)
  7. End Sub

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

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

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

Функции VBA для работы с текстом

  • ASC ()— эта функция позволяет вернуть числовой код для переданного символа. Например, ASC( «D» ) вернет 68. Эту функцию удобно использовать для того, чтобы определить следующую или предыдущую букву. Обычно она используется вместе с функцией Chr(), которая производит обратную операцию — возвращает символ по переданному его числовому коду.Варианты этой функции — AscB() и AscW():
    • AscB () — возвращает только первый байт числового кода для символа.
    • AscW () — возвращает код для символа в кодировке Unicode
  • Chr () — возвращает символ по его числовому коду. Может использоваться в паре с функцией Asc(), но чаще всего её применяют, когда нужно вывести служебный символ (например кавычки — » ), т.к. кавычки просто так в VBA-коде не ввести(нужно ставить двойные). Я обычно именно эту функцию и использую.

    Dim sWord As String sWord = Chr(34) & «Слово в кавычках» & Chr(34)

    Есть варианты этой функции — ChrB() и ChrW(). Работают аналогично таким же вариантам для функции Asc().
    InStr () и InStrRev ()— одна из самых популярных функций. Позволяет обнаружить в теле строковой переменной символ или последовательность символов и вернуть их позицию. Если последовательность не обнаружена, то возвращается 0.

    Dim sStr As String sStr = «w» If InStr(1, «Hello, World!», sStr, vbTextCompare) > 0 Then MsgBox «Искомое слово присутствует!» Else MsgBox «Искомое слово отсутствует!» End If

    Разница функций в том, что InStr() ищет указанное слово от начала строки, а InStrRev() с конца строки
    Left (), Right (), Mid ()— возможность взять указанное вами количество символов из существующей строковой переменной слева, справа или из середины соответственно.

    Dim sStr As String sStr = «Hello, World!» MsgBox Mid(sStr, 1, 5)

    Dim sStr As String sStr = «Hello, World!» MsgBox Replace(sStr, «Hello», «Bay»)

    Dim sStr As String sStr = «Hello, World!» MsgBox StrConv(«Hello, World!», vbUpperCase)

    В качестве второго параметра параметра могут применяться константы:

    • vbUpperCase: Преобразует все текстовые символы в ВЕРХНИЙ РЕГИСТР
    • vbLowerCase: Преобразует все текстовые символы в нижний регистр
    • vbProperCase: Переводит первый символ каждого слова в Верхний Регистр
    • *vbWide: Преобразует символы строки из однобайтовых в двухбайтовые
    • *vbNarrow: Преобразует символы строки из двухбайтовых в однобайтовые
    • **vbKatakana: Преобразует символы Hiragana в символы Katakana
    • **vbHiragana: Преобразует символы Katakana в символы Hiragana
    • ***vbUnicode: Преобразует строку в Юникод с помощью кодовой страницы системы по умолчанию
    • ***vbFromUnicode: Преобразует строку из Юникод в кодовую страницу системы по умолчанию

    * применимо для локализацией Дальнего востока
    ** применимо только для Японии
    *** не поддерживается операционными системами под управлением Macintosh

  • StrReverse () — «перевернуть» строку, разместив ее символы в обратном порядке. Функция работает только начиная от Excel 2000 и выше. Пример использования функции, а так же иные методы переворачивания слова можно посмотреть в этой статье: Как перевернуть слово?
  • Tab () — еще одна функция, которая используется для форматирования вывода на консоль. Размножает символы табуляции в том количестве, в котором вы укажете. Если никакое количество не указано, просто вставляет символ табуляции. Для вставки символа табуляции в строковое значение можно также использовать константу vbTab.
  • String () — позволяет получить строку из указанного количества символов (которые опять-таки указываются Вами). Обычно используются для форматирования вывода совместно с функцией Len().
  • vba convert string to int if string is a number

    I need to convert a string, obtained from excel, in VBA to an interger. To do so I’m using CInt() which works well. However there is a chance that the string could be something other than a number, in this case I need to set the integer to 0. Currently I have:

    The problem is that I cannot predict all possible non numeric strings which could be in this cell. Is there a way I can tell it to convert if it’s an integer and set to 0 if not?

    Создан 01 июн. 11 2011-06-01 13:38:15 Captastic

    5 ответов

    Use IsNumeric. It returns true if it’s a number or false otherwise.

    Создан 01 июн. 11 2011-06-01 14:04:19 ForEachLoop

    CInt can still fail due to overflow even if IsNumeric returns True — specifically for numbers less than -32768 or greater than 32767. – Brian Camire 01 июн. 11 2011-06-01 14:32:12

    To avoid the overflow problem, you could use Int or Fix instead of CInt, although their behavior is slightly different when it comes to dealing with non-integer decimal numbers — CInt rounds, whereas Int truncates downwards (away from zero) and Fix truncates upwards (towards zero). – Brian Camire 01 июн. 11 2011-06-01 14:38:03

    As an alternative to using IsNumeric, you could simply start with a default of zero, try to convert the supplied value with Int, and ignore any errors, as in something like this: ‘Public Function IntOrZero(ByVal vValue As Variant) As Double|IntOrZero = 0|On Error Resume Next|IntOrZero = Int(vValue)|End Function’ — just replace the | with line breaks. – Brian Camire 01 июн. 11 2011-06-01 14:43:44

    To put it on one line:

    Создан 01 июн. 11 2011-06-01 15:44:26 ray

    Try this: currentLoad = ConvertToLongInteger(oXLSheet2.Cells(4, 6).Value) with this function:

    I chose Long (Integer) instead of simply Integer because the min/max size of an Integer in VBA is crummy (min: -32768, max:+32767). It’s common to have an integer outside of that range in spreadsheet operations.

    The above code can be modified to handle conversion from string to-Integers, to-Currency (using CCur() ), to-Decimal (using CDec() ), to-Double (using CDbl() ), etc. Just replace the conversion function itself (CLng). Change the function return type, and rename all occurrences of the function variable to make everything consistent.

    Создан 03 июн. 11 2011-06-03 16:36:56 Isaac Comer-Wyrd

    Here are a three functions that might be useful. First checks the string for a proper numeric format, second and third function converts a string to Long or Double.

    Создан 29 авг. 12 2012-08-29 16:38:21 Doug

    The first function has rather specific format requirements that make it not nearly as relevant to the question as the other answers. The 2nd and 3rd function should not be used because all they do is call one vba function while requiring a narrower variable. It would be more reasonable to call them «ConvertStringToDouble» or «ConvertStringToLong» which makes it even clearer why it adds no value. – Daniel Cook 29 авг. 12 2012-08-29 19:23:47

    First function is specific in that it checks to make sure no other characters or typo’s get entered (I have had problems with people entering extra characters) so this just checks to make sure the string can be converted by the CDbl or CLng functions without blowing up or returning incorrect values. Correct on the remaining as I was using these a debug functions. One could put the check for valid numeric call in both of these before converting the string unless you always assume the string is in the correct format. I never assume. Thanks for the comments. – Doug 29 авг. 12 2012-08-29 21:28:57

    Cast to long or cast to int, be aware of the following.

    These functions are one of the view functions in Excel VBA that are depending on the system regional settings. So if you use a comma in your double like in some countries in Europe, you will experience an error in the US.

    E.g., in european excel-version 0,5 will perform well with CDbl(), but in US-version it will result in 5. So I recommend to use the following alternative:

    Of course you can also think of cases where people use commas and dots, e.g., three-thousand as 3,000.00. If you require functionality for these kind of cases, then you have to check for another solution.

    Создан 19 июн. 13 2013-06-19 12:32:12 PeterH

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