peat Пользователь Сообщений: 119 |
#1 10.10.2013 23:08:47 Доброго времени суток!) ситуация такая — тысячи ячеек с числами вида xy.z, а мне нужен разделитель запятая. делая замену — все хорошо. записываю замену макрорекодером, выполняю макрос — числа сохраняются, как текст о0
не могу попробовать в работе, но, скорее всего, будет пахать. вопрос — почему после выполнения макроса такая ошибка? |
||
Watcher_1 Пользователь Сообщений: 155 Мои координаты в профиле |
У меня нормально конветит даже без .Replace «,», «.» |
The_Prist Пользователь Сообщений: 14183 Профессиональная разработка приложений для MS Office |
Потому что при замене из самого Excel — он пытается определить тип данных и преобразовать в верный на его взгляд тип. Если же замену делаете через VBA — то у VBA свои законы и он просто меняет данные, используя метод Excel-я. Никаких проверок типов в данном случае не происходит. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
peat Пользователь Сообщений: 119 |
вот это даа, вот это философский ответ) такого в литературе не прочтешь, наверное) |
Слэн Пользователь Сообщений: 5192 |
философский — это насмешка, судя по смайлу вот так у нас всегда, демократия, тоже ругательное слово, интеллигенция — еще пуще но реально философия икселя такова, что если данные вводятся с клавиатуры, то нет возможности определить компетентность вводящего и применяются определенные методы проверки, а уж если человек дошел до использования макросов, то это что-нибудь да значит, и проверять его уже надо меньше, он сам позаботится о правильности ввода. |
peat Пользователь Сообщений: 119 |
нет, уважаемый Слэн, Вы не правы, это не насмешка, просто улыбка) я, как человек по профессии далекий от программирования, но ощущающий необходимость в его изучении, с уважением отношусь к вещам, которые высказывают гуру на этом сайте. вот сейчас пойду задам еще один вопрос в новой теме) |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Гы) Все дружно утерлись после peat. … Я сам — дурнее всякого примера! … |
peat Пользователь Сообщений: 119 |
#8 30.10.2013 08:19:46 снова всем доброго времени суток, возникла необходимость поднять тему) задача все та же — найти точки и заменить их на запятые. только вот чисел стало куда больше — 2 столбца по 100к значений. Вот такой вот нехитрый код
работает очень долго и, почему-то, вместо 23.456 получает 23 456, но вместо 0.0123 получает 0,0123) |
||
Слэн Пользователь Сообщений: 5192 |
пример данных небольшой можно? |
peat Пользователь Сообщений: 119 |
Слэн там около 5к значений, чтобы влезло на сайт. в реальности там по 150к значений)конечно, не все они нужны, нужно сделать выборку из них, с которой в дальнейшем и работать. может быть, есть какой-то способ замены в массиве? например, взять из этих 150к каждое 5ое число,занести в массив, там изменить, и добавить на график? Прикрепленные файлы
|
Слэн Пользователь Сообщений: 5192 |
#11 30.10.2013 09:09:10
Живи и дай жить.. |
||
Слэн Пользователь Сообщений: 5192 |
на 150 тыс отработало секунды за 3 на моем небыстром |
Hugo Пользователь Сообщений: 23257 |
#13 30.10.2013 10:12:53 Такой стандартный и понятный вариант:
Почти ничего не менял в записи рекордера — хотя очевидно есть что сократить.
или даже
Изменено: Hugo — 30.10.2013 10:15:12 |
||||||
peat Пользователь Сообщений: 119 |
Слэн, да, очень быстро работает, спасибо) |
peat Пользователь Сообщений: 119 |
Уважаемый Слэн, гугл меня спас, вопрос снимается, спасибо большое) Изменено: peat — 30.10.2013 11:28:00 |
Hugo Пользователь Сообщений: 23257 |
«последний ваш вариант скопировал данные с точками» — ну значит там были не «Число сохранено как текст», а текст, похожий на число |
peat Пользователь Сообщений: 119 |
Hugo, проблема изначально стояла в замене точек на запятые) но буду знать о таком вот методе избавления от ошибки «сохранено как текст», спасибо большое |
Слэн Пользователь Сообщений: 5192 |
#18 30.10.2013 12:43:41 примерно… для vba представление с точкой в качестве десятичного разделителя является стандартом. а обратно уже иксель понимает, что числа надо представлять соответственно локали Живи и дай жить.. |
I want to store text such as ‘001234’ in a cell. I have set the number format of this cell to text. After storing, an error ‘Number Stored as Text’ is shown in the form of a green triangle at the top left corner of the cell. It is very disturbing and I want it to be removed programmatically.
asked Aug 19, 2013 at 15:28
Consider:
Sub Macro1()
Application.ErrorCheckingOptions.NumberAsText = False
End Sub
This is a single line of a much larger macro to configure Excel when I begin working on a new computer.
answered Aug 19, 2013 at 15:36
Gary’s StudentGary’s Student
95.3k9 gold badges58 silver badges98 bronze badges
2
The above examples turn off the «number stored as text» checking for the application.
This code will turn it off for a particular cell:
range("G93").Errors.Item(xlnumberastext).Ignore = True
Gufran Hasan
8,7867 gold badges37 silver badges50 bronze badges
answered Jul 22, 2019 at 14:48
You can select the range you want to work and then put for example (now added speechmarks):
Range("A1:Z20").Application.ErrorCheckingOptions.NumberAsText = False
answered Jun 15, 2016 at 10:17
2
Alternately, instead of formatting the cell as text, you could format the cell as 000000 to get the leading 0’s to show.
answered Aug 19, 2013 at 15:41
tigeravatartigeravatar
26.1k5 gold badges29 silver badges38 bronze badges
1
0 / 0 / 0 Регистрация: 27.06.2011 Сообщений: 63 |
|
1 |
|
Как автоматизировать поиск и устранение ошибки «число сохранено как текст»?17.09.2011, 17:03. Показов 8403. Ответов 13
Есть столбец, в котором есть ячейки, содержащие численные значения, сохраненные как текст. Как можно автоматизировать исправление такмх ошибок?
0 |
Alex77 |
||||
19.09.2011, 03:08 |
2 |
|||
Попробуй просто проверять примерно так:
|
0 / 0 / 0 Регистрация: 27.06.2011 Сообщений: 63 |
|
22.09.2011, 13:19 [ТС] |
3 |
спасибо за ответ!
0 |
Сумрак |
||||
25.09.2011, 05:51 |
4 |
|||
это отклчение на проверку ошибки… вообще |
Сумрак |
||||
25.09.2011, 06:09 |
5 |
|||
|
Сумрак |
||||
25.09.2011, 09:23 |
6 |
|||
|
Сумрак |
|
25.09.2011, 18:35 |
7 |
хех.. парни.. тут сплошные ограничения… не могу получить полные функции етого обькта… :-)))) |
0 / 0 / 0 Регистрация: 27.06.2011 Сообщений: 63 |
|
26.09.2011, 23:24 [ТС] |
8 |
Я нашел способ автоматизировать эту задачу!!!!!
0 |
0 / 0 / 0 Регистрация: 25.11.2015 Сообщений: 3 |
|
04.05.2018, 14:36 |
9 |
Сумрак — the Best !!!
0 |
1813 / 1135 / 346 Регистрация: 11.07.2014 Сообщений: 4,003 |
|
04.05.2018, 18:12 |
10 |
temeshov, а просто в настройках отключить эту опцию вас не устраивает?
0 |
0 / 0 / 0 Регистрация: 25.11.2015 Сообщений: 3 |
|
05.05.2018, 07:12 |
11 |
Уважаемый Burk, бывают ситуации, когда с числами в таблице нужно произвести какие то действия. Например, хотя бы просто сравнить их с полученными числами из другой таблицы (даже в другом файле). При этом возникает проблема, т.к. сравнение числа и текста само по себе некорректно.
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
05.05.2018, 07:32 |
12 |
Vja4eslav, Для сравнения можно использовать такой вариант (вместо констант можно использовать ссылки)
0 |
0 / 0 / 0 Регистрация: 25.11.2015 Сообщений: 3 |
|
05.05.2018, 08:36 |
13 |
Спасибо, возьму на заметку)
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
05.05.2018, 09:27 |
14 |
Vja4eslav, Забыл предупредить, при таком сравнении — разделитель целой и дробной части, должен быть один и тот же, т.е. истину мы получим только в первом случае. Код =СОВПАД(5,5;"5,5") =СОВПАД(5,5;"5.5")
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
05.05.2018, 09:27 |
Помогаю со студенческими работами здесь Как написать регулярное выражение для выдергивания английских букв и символов: «+», «,», «:», «-«, » «, «!», «?» и «.» Написать программу проверки правильности написания сочетаний «жи», «ши», «ча», «ща», «чу», «щу». Исправить ошибки нужно с помощью $res=ereg_replace($pattern,»»(или еще как), $str); получить в $res строку: «текст—текст» нужно с помощью Проверить текст на соблюдение правила «жи-ши», «ча-ща» и исправить ошибки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 14 |
Преобразование текста в число с помощью кода VBA Excel. Массовое преобразование чисел из текстового формата в числовой в заданном диапазоне.
Преобразование текста в число
Преобразование чисел, записанных как текст, в числовой формат осуществляется в VBA Excel с помощью функций преобразования типов данных. Числа в текстовом формате могут быть получены из:
- ячеек рабочего листа с текстовым форматом;
- элементов управления формы (TextBox, ListBox, ComboBox);
- строковых переменных;
- выражений, возвращающих число в виде текста;
- текстового поля функции InputBox.
В большинстве случаев VBA Excel сам распознает текст как число без всяких преобразований:
Sub Primer1() Debug.Print 23.1254 * 5.2 ‘Результат: 120,25208 Debug.Print «23,1254» * «5,2» ‘Результат: 120,25208 Debug.Print TypeName(«23,1254») ‘Результат: String Debug.Print TypeName(CDbl(«23,1254»)) ‘Результат: Double End Sub |
Обратите внимание на разделитель дробной части.
Преобразование смешанной строки
Преобразование в число строки, в начале которой имеются цифры, а далее идут другие символы, осуществляется в VBA Excel с помощью функции Val. Из других символов распознается только точка (.) в качестве разделителя дробной части.
Sub Primer2() Debug.Print Val(«021.36abcde») ‘Результат: 21,36 Debug.Print Format(Val(«021.36abcde»), «000.0») ‘Результат: 021,4 End Sub |
Массовое преобразование чисел
Иногда требуется массовое преобразование чисел из текстового формата в числовой в заданном диапазоне рабочего листа.
Пример преобразования диапазона ячеек с текстовым форматом в общий формат и значений ячеек из строки в число на примере объекта Selection:
Sub Primer3() Dim MyCell As Range Selection.NumberFormat = «General» For Each MyCell In Selection If IsNumeric(MyCell) Then MyCell = MyCell * 1 Next End Sub |
Сначала выбранному диапазону присваивается общий формат ("General"
). Но текстовые значения в ячейках еще не преобразовались в числа. Обходим циклом все ячейки диапазона, и, если текстовое значение ячейки можно интерпретировать как число, умножаем это значение на единицу. После этого текст будет преобразован в число.
I have columns of numbers that, for whatever reason, are formatted as text. This prevents me from using arithmetic functions such as the subtotal function. What is the best way to convert these «text numbers» to true numbers?
Here is a screenshot of the specific issue:
I’ve tried these snippets to no avail:
Columns(5).NumberFormat = "0"
and
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Teamothy
1,9903 gold badges15 silver badges24 bronze badges
asked Apr 21, 2016 at 13:41
aLearningLadyaLearningLady
1,9384 gold badges20 silver badges42 bronze badges
4
Use the below function (changing [E:E]
to the appropriate range for your needs) to circumvent this issue (or change to any other format such as «mm/dd/yyyy»):
[E:E].Select
With Selection
.NumberFormat = "General"
.Value = .Value
End With
P.S. In my experience, this VBA solution works SIGNIFICANTLY faster on large data sets and is less likely to crash Excel than using the ‘warning box’ method.
answered Apr 21, 2016 at 13:41
aLearningLadyaLearningLady
1,9384 gold badges20 silver badges42 bronze badges
3
I had this problem earlier and this was my solution.
With Worksheets("Sheet1").Columns(5)
.NumberFormat = "0"
.Value = .Value
End With
answered Apr 21, 2016 at 15:20
0
This can be used to find all the numeric values (even those formatted as text) in a sheet and convert them to single (CSng function).
For Each r In Sheets("Sheet1").UsedRange.SpecialCells(xlCellTypeConstants)
If IsNumeric(r) Then
r.Value = CSng(r.Value)
r.NumberFormat = "0.00"
End If
Next
answered Sep 2, 2017 at 21:29
JonesJones
1812 silver badges4 bronze badges
1
This converts all text in columns of an Excel Workbook to numbers.
Sub ConvertTextToNumbers()
Dim wBook As Workbook
Dim LastRow As Long, LastCol As Long
Dim Rangetemp As Range
'Enter here the path of your workbook
Set wBook = Workbooks.Open("yourWorkbook")
LastRow = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastCol = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
For c = 1 To LastCol
Set Rangetemp = Cells(c).EntireColumn
Rangetemp.TextToColumns DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
Next c
End Sub
answered Jan 11, 2017 at 15:39
1
''Convert text to Number with ZERO Digits and Number convert ZERO Digits
Sub ZERO_DIGIT()
On Error Resume Next
Dim rSelection As Range
Set rSelection = rSelection
rSelection.Select
With Selection
Selection.NumberFormat = "General"
.Value = .Value
End With
rSelection.Select
Selection.NumberFormat = "0"
Set rSelection = Nothing
End Sub
''Convert text to Number with TWO Digits and Number convert TWO Digits
Sub TWO_DIGIT()
On Error Resume Next
Dim rSelection As Range
Set rSelection = rSelection
rSelection.Select
With Selection
Selection.NumberFormat = "General"
.Value = .Value
End With
rSelection.Select
Selection.NumberFormat = "0.00"
Set rSelection = Nothing
End Sub
''Convert text to Number with SIX Digits and Number convert SIX Digits
Sub SIX_DIGIT()
On Error Resume Next
Dim rSelection As Range
Set rSelection = rSelection
rSelection.Select
With Selection
Selection.NumberFormat = "General"
.Value = .Value
End With
rSelection.Select
Selection.NumberFormat = "0.000000"
Set rSelection = Nothing
End Sub
answered Mar 14, 2020 at 9:10
0
The solution that for me works is:
For Each xCell In Selection
xCell.Value = CDec(xCell.Value)
Next xCell
answered Feb 22, 2018 at 17:56
Using aLearningLady’s answer above, you can make your selection range dynamic by looking for the last row with data in it instead of just selecting the entire column.
The below code worked for me.
Dim lastrow as Integer
lastrow = Cells(Rows.Count, 2).End(xlUp).Row
Range("C2:C" & lastrow).Select
With Selection
.NumberFormat = "General"
.Value = .Value
End With
answered Feb 10, 2019 at 18:18
MikeyMikey
701 gold badge1 silver badge10 bronze badges
The solution that worked for me many times is:
Sub ConvertTextToNumber()
With Range("A1:CX500") 'you can change the range
.NumberFormat = "General"
.Value = .Value
End With
End Sub
answered Sep 23, 2021 at 19:03
For large datasets a faster solution is required.
Making use of ‘Text to Columns’ functionality provides a fast solution.
Example based on column F, starting range at 25 to LastRow
Sub ConvTxt2Nr()
Dim SelectR As Range
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ThisWorkbook.Sheets("DumpDB")
LastRow = sht.Cells(sht.Rows.Count, "F").End(xlUp).Row
Set SelectR = ThisWorkbook.Sheets("DumpDB").Range("F25:F" & LastRow)
SelectR.TextToColumns Destination:=Range("F25"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
End Sub
answered Jan 15, 2019 at 7:07
LouisLouis
392 bronze badges
1
From the recorded macro one gets the code below; for a new application you just need to update selection and range:
Sub num()
Columns("B:B").Select
Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
End Sub
L.Dutch
9263 gold badges17 silver badges38 bronze badges
answered Dec 14, 2022 at 14:59
I had problems making above codes work. To me multiplying with 1 did the trick:-)
Cells(1, 1).Select
Cells(1, 1) = ActiveCell * 1
answered Dec 23, 2021 at 12:13