Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Преобразовать ячейки в числа - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Преобразовать ячейки в числа
Ers1der Дата: Четверг, 03.10.2024, 21:43 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Всех приветствую !
Нужно изменить ячейки так, что бы их можно было складывть, умножать и т.д (и получался не 0)
Заранее спасибо !
К сообщению приложен файл: 6084649.xlsx (103.7 Kb)
 
Ответить
СообщениеВсех приветствую !
Нужно изменить ячейки так, что бы их можно было складывть, умножать и т.д (и получался не 0)
Заранее спасибо !

Автор - Ers1der
Дата добавления - 03.10.2024 в 21:43
Hugo Дата: Четверг, 03.10.2024, 22:11 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Ers1der, как вариант - выделить ячейки, выполнить
[vba]
Код

Sub obrabotkaTab()
Dim c, s$
For Each c In Selection.Cells
    s = c.Value
    c.NumberFormat = "general"
    c.Value = --Replace(s, vbTab, "")
Next
End Sub
[/vba]

Так с подстраховкой, и можно выделить сразу весь лист:
[vba]
Код

Sub obrabotkaTab()
Dim c, s$, defCALC

    defCALC = Application.Calculation: Application.DisplayAlerts = False
    Application.EnableEvents = False: Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

For Each c In Intersect(Selection.Parent.UsedRange, Selection).Cells
    s = c.Value
    If IsNumeric(s) Then
    c.NumberFormat = "general"
    c.Value = --Replace(s, vbTab, "")
    End If
Next

    Application.EnableEvents = True: Application.Calculation = defCALC
    Application.DisplayAlerts = True:    Application.ScreenUpdating = True
End Sub
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Четверг, 03.10.2024, 23:27
 
Ответить
СообщениеErs1der, как вариант - выделить ячейки, выполнить
[vba]
Код

Sub obrabotkaTab()
Dim c, s$
For Each c In Selection.Cells
    s = c.Value
    c.NumberFormat = "general"
    c.Value = --Replace(s, vbTab, "")
Next
End Sub
[/vba]

Так с подстраховкой, и можно выделить сразу весь лист:
[vba]
Код

Sub obrabotkaTab()
Dim c, s$, defCALC

    defCALC = Application.Calculation: Application.DisplayAlerts = False
    Application.EnableEvents = False: Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

For Each c In Intersect(Selection.Parent.UsedRange, Selection).Cells
    s = c.Value
    If IsNumeric(s) Then
    c.NumberFormat = "general"
    c.Value = --Replace(s, vbTab, "")
    End If
Next

    Application.EnableEvents = True: Application.Calculation = defCALC
    Application.DisplayAlerts = True:    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Hugo
Дата добавления - 03.10.2024 в 22:11
i691198 Дата: Суббота, 05.10.2024, 18:33 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 349
Репутация: 110 ±
Замечаний: 0% ±

Функция ЧЗНАЧ с этим примером справляется. Но т.к. там встречаются не числовые значения, тогда такая формула
Код
=ЕСЛИОШИБКА(ЧЗНАЧ(A1);A1)
Правда изменять значения в этом же диапазоне формулы не могут, это только макросом.
Другой вариант макроса для всего примера.
[vba]
Код
Sub Num()
  Dim Cl As Range
  For Each Cl In Range("A1:X644")
    If IsNumeric(Cl) And Cl <> "" Then Cl = Val(Replace(Cl, ",", "."))
  Next
End Sub
[/vba]
Четвертую строку кода можно написать по другому [vba]
Код
If IsNumeric(Cl) And Cl <> "" Then Cl = WorksheetFunction.NumberValue(Cl, ",", " ")
[/vba]но работать будет медленее.


Сообщение отредактировал i691198 - Суббота, 05.10.2024, 19:03
 
Ответить
СообщениеФункция ЧЗНАЧ с этим примером справляется. Но т.к. там встречаются не числовые значения, тогда такая формула
Код
=ЕСЛИОШИБКА(ЧЗНАЧ(A1);A1)
Правда изменять значения в этом же диапазоне формулы не могут, это только макросом.
Другой вариант макроса для всего примера.
[vba]
Код
Sub Num()
  Dim Cl As Range
  For Each Cl In Range("A1:X644")
    If IsNumeric(Cl) And Cl <> "" Then Cl = Val(Replace(Cl, ",", "."))
  Next
End Sub
[/vba]
Четвертую строку кода можно написать по другому [vba]
Код
If IsNumeric(Cl) And Cl <> "" Then Cl = WorksheetFunction.NumberValue(Cl, ",", " ")
[/vba]но работать будет медленее.

Автор - i691198
Дата добавления - 05.10.2024 в 18:33
Hugo Дата: Суббота, 05.10.2024, 19:10 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Вообще можно в коде сразу по всему диапазону Replace(диапазон, vbTab, "") но там и формат ячеек нужно менять чтоб далее работать нормально, но на практике не всем ячейкам, даже тут есть где в ячейках нет чисел, но есть текст, поэтому я перебирал ячейки, а чтобы быстрее шевелилось - желательно выключать всякие события и пересчёты.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеВообще можно в коде сразу по всему диапазону Replace(диапазон, vbTab, "") но там и формат ячеек нужно менять чтоб далее работать нормально, но на практике не всем ячейкам, даже тут есть где в ячейках нет чисел, но есть текст, поэтому я перебирал ячейки, а чтобы быстрее шевелилось - желательно выключать всякие события и пересчёты.

Автор - Hugo
Дата добавления - 05.10.2024 в 19:10
i691198 Дата: Суббота, 05.10.2024, 20:34 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 349
Репутация: 110 ±
Замечаний: 0% ±

там и формат ячеек нужно менять

Для данного примера это не требуется, во всем диапазоне установлен Общий формат.
 
Ответить
Сообщение
там и формат ячеек нужно менять

Для данного примера это не требуется, во всем диапазоне установлен Общий формат.

Автор - i691198
Дата добавления - 05.10.2024 в 20:34
Hugo Дата: Суббота, 05.10.2024, 20:45 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
А ну да, формат общий, но если просто всему диапазону сделать
[vba]
Код
Intersect(Selection.Parent.UsedRange, Selection).Replace vbTab, "", xlPart
[/vba]
то результат такой:


И всё равно нужно дорабатывать например заменой запятой на запятую, но вдруг там окажутся целые значения?
Хотя не, целые они сразу числа...
Ну как вариант значит можно сделать просто две замены.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Суббота, 05.10.2024, 20:46
 
Ответить
СообщениеА ну да, формат общий, но если просто всему диапазону сделать
[vba]
Код
Intersect(Selection.Parent.UsedRange, Selection).Replace vbTab, "", xlPart
[/vba]
то результат такой:


И всё равно нужно дорабатывать например заменой запятой на запятую, но вдруг там окажутся целые значения?
Хотя не, целые они сразу числа...
Ну как вариант значит можно сделать просто две замены.

Автор - Hugo
Дата добавления - 05.10.2024 в 20:45
Hugo Дата: Суббота, 05.10.2024, 20:55 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
В итоге такой компактный вариант чуть доработал то что на планете написал sokol92 : выделяем все ячейки листа и
[vba]
Код
Sub tt()
With Intersect(Selection.Parent.UsedRange, Selection)
.Replace vbTab, "", xlPart
.FormulaLocal = .FormulaLocal
End With
End Sub
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеВ итоге такой компактный вариант чуть доработал то что на планете написал sokol92 : выделяем все ячейки листа и
[vba]
Код
Sub tt()
With Intersect(Selection.Parent.UsedRange, Selection)
.Replace vbTab, "", xlPart
.FormulaLocal = .FormulaLocal
End With
End Sub
[/vba]

Автор - Hugo
Дата добавления - 05.10.2024 в 20:55
i691198 Дата: Суббота, 05.10.2024, 21:15 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 349
Репутация: 110 ±
Замечаний: 0% ±

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


Сообщение отредактировал i691198 - Суббота, 05.10.2024, 21:24
 
Ответить
СообщениеHugo, Вы зачем то усложняете задачку, а ведь это лишние тормоза. Мой пример проще и работает гораздо быстрее с тем же результатом. Этот пример похож на выгрузку с какой то программы, все значения в виде текста, а нужны числа. Я считаю, что функция Val лучше всего подходит для этого. Она автоматом удаляет из теста пробелы, символы табуляции и знаки перевода строк, если таковые имеются. Нужно только сделать замену запятых на точки, чтобы не потерять дробную часть чисел.

Автор - i691198
Дата добавления - 05.10.2024 в 21:15
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!