Функции преобразования типов данных в VBA Excel. Наименования функций, синтаксис, типы возвращаемых данных, диапазоны допустимых значений выражения-аргумента.
Преобразование чисел в строки
Функцию можно использовать Format для преобразования числа в отформатированную строку, которая может включать не только соответствующие цифры, но и символы форматирования, такие как знак валюты (например $ ,), разделители тысяч или символы группирования цифр (например,), , и десятичный разделитель (например,) . . Formatавтоматически использует соответствующие символы в соответствии с региональными параметрами, заданными на панели управления Windows.
Обратите внимание, что оператор конкатенации ( & ) может преобразовать число в строку неявным образом, как показано в следующем примере.
‘ The following statement converts count to a String value. Str = “The total count is ” & count
Источник: http://docs.microsoft.com/ru-ru/dotnet/visual-basic/programming-guide/language-features/data-types/conversions-between-strings-and-other-types
Если на нажатие кнопки сравнения «Сравнить»(CommandButton1) использовать код:
- Private Sub CommandButton1_Click()
- Dim i, b As String
- i = TextBox1.Value
- b = TextBox2.Value
- If i < b = True Then MsgBox («Второе число больше «)
- If i > b = True Then MsgBox («Первое число больше «)
- End Sub
А на нажатие кнопки суммы «Сумма» (CommandButton2) применить код:
- Private Sub CommandButton2_Click()
- Dim i, b, d As String
- i = UserForm1.TextBox1.Value
- b = UserForm1.TextBox2.Value
- d = i + b
- TextBox3.Value = d End Sub
Сравнение значений будет выполняться верно, но расчеты суммы будут неверными:
Источник: http://RuExcel.ru/val-vba-excel/
Преобразование текста в число в vba
Смотрите также Проверил – работает.
Sub: Исправить формат экспортированных, то это в диапазоне.
Chr(160), “”, 1, ‘чтобы код быстрее
команду Специальная вставка. правда не в по умолчанию 9
в ячейке в 1 To R.Columns.CountSub m() Dim можно распространить на
все править ручками. за компьютером, отвечаетеcountervectorSilenser1588KuklP
как текст чисел хоть и меняет
undefined7
, vbBinaryCompare) temp сработал, т.к. работать
В группе Операция курсе… как я посмотрел
текст) R.Cells(i, j).Value =
i&, x As еще 12 столбцов
dzug
на вопросы, а: Здраствуйте.: не могли бы
: Да Саш, невнимателенErdni
формат ячейки на:
= Replace(temp, “,”, с VBA-массивами быстрее
выбираю параметр умножитьЕсли сохранять вHugo121Попробовал записать макрос
Val(R.Cells(i, j).Value) Next Double i =
справа?: Попробуйте вот так когда вы отдыхаете?РаботаетеСпасибо за ответы Вы написать пример,Мне на планете: Спасибо! Проблема решена числовой, но выглядит
undefined7 “.”, 1, , ‘в некоторых случаях, и нажимаю кнопку dbf как есть: cstr() преобразовывает в
planetaexcel.ru>
Источник: http://my-excel.ru/tekst/excel-vba-preobrazovanie-stroki-v-chislo.html
5 ответов
используйте функцию ниже (изменение [E:E] соответствующий диапазон для ваших нужд), чтобы обойти эту проблему:
[E:E].SelectWith Selection .NumberFormat = “General” .Value = .ValueEnd With
P.S. По моему опыту, это решение VBA работает значительно быстрее на больших наборах данных и с меньшей вероятностью приведет к сбою Excel, чем с помощью метода “окно предупреждения”.
Это можно использовать для поиска всех числовых значений (даже отформатированных как текст) в листе и преобразования их в single (функция CSng).
For Each r In Sheets(“Sheet1”).UsedRange.SpecialCells(xlCellTypeConstants) If IsNumeric(r) Then r.Value = CSng(r.Value) r.NumberFormat = “0.00” End IfNext
У меня была эта проблема раньше, и это было мое решение.
With Worksheets(“Sheet1”).Columns(5) .NumberFormat = “0” .Value = .ValueEnd With
это преобразует весь текст в Столбцах книги Excel в Numbers.
Sub ConvertTextToNumbers()Dim wBook As WorkbookDim LastRow As Long, LastCol As LongDim Rangetemp As Range’Enter here the path of your workbookSet wBook = Workbooks.Open(“yourWorkbook”)LastRow = Cells.Find(What:=”*”, After:=Range(“A1″), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).RowLastCol = Cells.Find(What:=”*”, After:=Range(“A1”), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).ColumnFor c = 1 To LastColSet Rangetemp = Cells(c).EntireColumnRangetemp.TextToColumns DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 1), TrailingMinusNumbers:=TrueNext cEnd Sub
решение, которое для меня работает:
For Each xCell In Selection xCell.Value = CDec(xCell.Value)Next xCell
Источник: http://askdev.ru/q/vba-preobrazovanie-teksta-v-chislo-373686/
Как преобразовать строку в число?
Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты
.
Читайте
требования к создаваемым темам
.


Сообщения: 151Зарегистрирован: 21.07.2004 (Ср) 18:08Откуда: Москва, Россия
- Сайт
- ICQ
Snussi » 27.07.2005 (Ср) 9:34
А вот и не факт!
Val воспримет только точку как дес. разделитель.
Имхо, лучше CDbl, CINT,Clng и тд. Правда, они воспринимают как дес. разделитель символ, установленный в региональных настройками.
Так что, смотря что нужно делать

Andrey Fedorov » 27.07.2005 (Ср) 9:43
Snussi писал(а):А вот и не факт!
Val воспримет только точку как дес. разделитель.
Имхо, лучше CDbl, CINT,Clng и тд. Правда, они воспринимают как дес. разделитель символ, установленный в региональных настройками.
Так что, смотря что нужно делать
Заменить точку на региональный разделитель и преобразовать в число:
Код: Выделить всёCDbl(Replace(MyString,”.”,Format(0,”.”)))
Это сработает во всех случаях…
Фиг Вам! – Сказал Чебурашка, обгладывая Крокодила Гену…


Сообщения: 4392Зарегистрирован: 12.04.2005 (Вт) 17:50Откуда: Н.Новгород
- ICQ
Viper » 27.07.2005 (Ср) 11:16
а с еще большей гарантией сработает
Код: Выделить всёVal(Replace(MyString,”,”,”.”)
Весь мир матрица, а мы в нем потоки байтов!

GSerg » 27.07.2005 (Ср) 11:18
Да ну? Даже когда десятичный разделитель – точка с запятой?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov » 27.07.2005 (Ср) 11:19
!Viper! писал(а):а с еще большей гарантией сработает
Код: Выделить всёVal(Replace(MyString,”,”,”.”)
Ну большей-то гарантии тут нет совершенно.
Кроме того, если юзер применяет в качестве разделителя нечто отличное от точки и запятой? Ведь теоретически это возможно…
Фиг Вам! – Сказал Чебурашка, обгладывая Крокодила Гену…


Сообщения: 4392Зарегистрирован: 12.04.2005 (Вт) 17:50Откуда: Н.Новгород
- ICQ
Viper » 27.07.2005 (Ср) 11:42
соответственно неплохо бы узнать какой разделитель применяет пользователь.
в реестре это лежит здесь :
HKEY_CURRENT_USERControl PanelInternational
строковый параметр sDecimal
Возможно есть и API функция, которая позволяет получить этот разделитель не заходя в реестр
Весь мир матрица, а мы в нем потоки байтов!

GSerg » 27.07.2005 (Ср) 11:58
Так вот как раз format$(0, “.”) и получит этот разделитель.
Внимательно фтыкаем написанное выше.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Сообщения: 4392Зарегистрирован: 12.04.2005 (Вт) 17:50Откуда: Н.Новгород
- ICQ
Viper » 27.07.2005 (Ср) 12:13
GSerg писал(а):Так вот как раз format$(0, “.”) и получит этот разделитель.
как это????
Весь мир матрица, а мы в нем потоки байтов!

GSerg » 27.07.2005 (Ср) 12:18
Выполни: msgbox format$(0, “.”)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Сообщения: 4392Зарегистрирован: 12.04.2005 (Вт) 17:50Откуда: Н.Новгород
- ICQ
Viper » 28.07.2005 (Чт) 11:06
GSerg писал(а):Выполни: msgbox format$(0, “.”)
Ну и получил я приглашение в виде точки. И что?
Если вместо “.” поставить “,”, получим запятую и так далее…
в чем фишка то?
Весь мир матрица, а мы в нем потоки байтов!

GSerg » 28.07.2005 (Чт) 11:08
Сходи в свои национальные виндовские настройки. И посмотри, что там стоит десятичным разделителем.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Сообщения: 4392Зарегистрирован: 12.04.2005 (Вт) 17:50Откуда: Н.Новгород
- ICQ
Viper » 28.07.2005 (Чт) 11:19
!Viper! писал(а):в реестре это лежит здесь :
HKEY_CURRENT_USERControl PanelInternational
строковый параметр sDecimal
тут они и есть. настройки то, национальные
Весь мир матрица, а мы в нем потоки байтов!


Сообщения: 1597Зарегистрирован: 02.12.2004 (Чт) 15:21
uhm » 28.07.2005 (Чт) 11:55
Hint: поменяй ручками десятичный разделитель на что-нибудь непотребное, а потом еще раз выполни msgbox format$(0, “.”)


Сообщения: 4392Зарегистрирован: 12.04.2005 (Вт) 17:50Откуда: Н.Новгород
- ICQ
Viper » 29.07.2005 (Пт) 11:16
uhm писал(а):Hint: поменяй ручками десятичный разделитель на что-нибудь непотребное, а потом еще раз выполни msgbox format$(0, “.”)
Ура! заработало! Но только в VB6. На VB.NET надо делать
Код: Выделить всёFormat(0,”.0″)
– выведет “$0”, если в качестве разделителя взять $.
Весь мир матрица, а мы в нем потоки байтов!

GSerg » 29.07.2005 (Пт) 11:21
А зачем этот финальный ноль выводить?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Сообщения: 4392Зарегистрирован: 12.04.2005 (Вт) 17:50Откуда: Н.Новгород
- ICQ
Viper » 29.07.2005 (Пт) 11:30
Казалось бы что действительно незачем, но команда
Format(0, “.”)
выводит к сожалению пустую строку.
Весь мир матрица, а мы в нем потоки байтов!

GSerg » 29.07.2005 (Пт) 11:37
Ага.
Слишком умно – не лучше, чем слишком глупо
Впрочем, в .NET есть CultureInfo.NumberFormat.NumberDecimalSeparator
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Сообщения: 4392Зарегистрирован: 12.04.2005 (Вт) 17:50Откуда: Н.Новгород
- ICQ
Viper » 09.08.2005 (Вт) 10:56
На всякий случай поясню разницу между CDbl и Val. Пусть десятичным разделителем является десятичная точка, а пользователь ввел строку в которой вместо точки запятая.
Код: Выделить всёDim dbl As Double
Dim str As String
str = “123,45”
dbl = CDbl(str) ‘здесь произойдет ошибка
dbl = Val(str) ‘ошибки не будет, но dbl будет равна нулю
Весь мир матрица, а мы в нем потоки байтов!

alibek » 09.08.2005 (Вт) 10:58
Ерунда, dbl будет равен 123
Lasciate ogni speranza, voi ch’entrate.


Сообщения: 4392Зарегистрирован: 12.04.2005 (Вт) 17:50Откуда: Н.Новгород
- ICQ
Viper » 09.08.2005 (Вт) 11:03
alibek писал(а):Ерунда, dbl будет равен 123
Вот уж нет. будет ошибка 13 “Type mismatch”, то бишь несовпадение типов
Весь мир матрица, а мы в нем потоки байтов!

GSerg » 09.08.2005 (Вт) 11:27
Да ну?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Сообщения: 4392Зарегистрирован: 12.04.2005 (Вт) 17:50Откуда: Н.Новгород
- ICQ
Viper » 09.08.2005 (Вт) 11:35
Сорри!!!
для
Код: Выделить всёdbl = CDbl(“123,45”)
будет ошибка несовпадения типов, но для
Код: Выделить всёdbl = Val(“123,45”)
действительно получим, что dbl равен 123.
Но разница между Val и СDbl тем не менее остается, что собственно я и хотел сказать.
Весь мир матрица, а мы в нем потоки байтов!

GSerg » 09.08.2005 (Вт) 11:39
А.
Собственно, это было сказано так много раз до этого
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: AhrefsBot и гости: 2
Источник: http://bbs.vbstreets.ru/viewtopic.php?t=18126
Функция VAL в VBA Excel или как преобразовать TextBox в число (цифру).
Иногда при написании макросов необходимо производить вычисления или сравнения числовых значений, которые вносятся в поля «TextBox». Существует небольшая проблемка при работе с этими данными – информация из поля «TextBox» воспринимается программой как текстовая и, соответственно, в расчетах не может использоваться.
Для решения денной проблемы в VBA можно использовать функцию VAL(), которая переводит в численный формат данных. VAL — это функция конвертирующая текстовые значения аргумента в целые числовые или числовые значения с плавающей запятой. Следует отметить что функция Val при преобразовании десятичных дробей в число может распознать только точку, то есть, если вы напишете десятичную дробь через запятую, то функция распознает только первую (целую)часть дроби, остальной текст после запятой функция не воспримет. Например: VAL(«10,8»)= 10
Источник: http://excelprost.ru/stroki/excel-vba-preobrazovanie-stroki-v-chislo.html
Примеры запросов
Выберите Салеприце, Финалприце, CBool (Салеприце>Финалприце) как Выражение1 из Продуктсалес;
Возвращает значение “Салеприце”, “Финалприце” и определяет, является ли Салеприце больше конечной цены. Возвращает “-1”, если истина и “0”, если ложь.
ВЫБЕРИТЕ ProductID, CByte (количество) как Выражение1 из Продуктсалес;
Возвращает значение “ProductID”, преобразует значения в поле “количество” в байтовый формат, а в столбце Выражение1 — на “ProductID” — преобразует значения из поля “количество” в денежный формат и выводится в столбце “выражение1”.
ВЫБЕРИТЕ ProductID, CDate (Датеофсале) как Выражение1 из Продуктсалес;
Возвращает “ProductID”, преобразует значения в поле “Датеофсале” в формат даты и выводит в столбец Выражение1.
ВЫБЕРИТЕ ProductID, CDbl (скидка) как Выражение1 из Продуктсалес;
Возвращает слово “ProductID”, преобразует значения из поля “скидка” в двойной формат и выводит его в столбце Выражение1.
ВЫБЕРИТЕ ProductID, CInt (скидка) как Выражение1 из Продуктсалес;
Возвращает “ProductID”, преобразует значения из поля “скидка” в целочисленный формат и отображает в столбце “выражение1”.
ВЫБЕРИТЕ ProductID, CLng (скидка) как Выражение1 из Продуктсалес;
Возвращает “ProductID”, преобразует значения в поле “скидка” в длинный формат и выводит его в столбце “выражение1”.
ВЫБЕРИТЕ ProductID, CSng (скидка) как Выражение1 из Продуктсалес;
Возвращает “ProductID”, преобразует значения из поля “скидка” в один формат и выводится в столбце “выражение1”.
ВЫБЕРИТЕ ProductID, CStr (скидка) как Выражение1 из Продуктсалес;
Возвращает “ProductID”, преобразует значения в поле “скидка” в строковый формат и выводит его в столбце Выражение1.
ВЫБЕРИТЕ ProductID, CVar (скидка) как Выражение1 из Продуктсалес;
Возвращает “ProductID”, преобразует значения в поле “скидка” в Double для числовых значений и строк для нечисловых значений.
Источник: http://excelprost.ru/stroki/excel-vba-preobrazovanie-stroki-v-chislo.html
sitesaid.ru
Создание сайта
Источник: http://excelprost.ru/stroki/excel-vba-preobrazovanie-stroki-v-chislo.html