This seems to be a continuation to my answer to your previous question, but if so I think you misunderstood what I meant. I’ve taken your code and amended it with my suggestion, but I’ve not tested it:
Public Sub VirgulaPunct()
Dim oRow As Range
Dim cell As Range
Dim i As Long, j As Long
Dim MyString As String
Dim aux As String
Application.ScreenUpdating = False
For i = Selection(Selection.Count).Row To Selection.Cells(1, 1).Row Step -1
For j = Selection(Selection.Count).Column To Selection.Cells(1, 1).Column Step -1
MyString = Cells(i, j).Value
MyString = Replace(MyString, ",", ";+;", 1)
MyString = Replace(MyString, ".", ",", 1)
MyString = Replace(MyString, ";+;", ".", 1)
Cells(i, j).Value = MyString
Next j
Next i
Application.ScreenUpdating = True
End Sub
So as I said in my previous answer, I do 3 calls to Replace
, but I do them for the whole string rather than per character in the string.
For future reference, it would probably be better if you updated your original question rather than to create a new one and then you could leave a comment for me under my answer and I’d seen that you have done so.
A_Qz 31 / 8 / 4 Регистрация: 21.01.2018 Сообщений: 53 |
||||||||
1 |
||||||||
Excel Замена запятой на точку09.12.2018, 11:23. Показов 20213. Ответов 4 Метки нет (Все метки)
Совсем маленький «зацеп». Несколько лет назад все работало как положено. А сегодня перестало.
А вот обратно:
запятая остается. Только содержимое ячейки переводит в текстовый формат, но запятая без изменении. Пробовал предварительно форматировать в текстовый, но ничего. Создается впечатление, где-то в VBA крепко зашита автозамена точки на запятую. Спасибо за объяснение.
1 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
09.12.2018, 11:23 |
4 |
1813 / 1135 / 346 Регистрация: 11.07.2014 Сообщений: 4,002 |
|
09.12.2018, 17:33 |
2 |
Сообщение было отмечено A_Qz как решение РешениеA_Qz, видимо в настройках экселя Пуск — Настройка — Дополнительно стоит галка Использовать системные разделители, а в винде разделитель запятая. Либо исправить в винде, либо здесь убрать галку и в Разделитель … поставить точку.
1 |
A_Qz 31 / 8 / 4 Регистрация: 21.01.2018 Сообщений: 53 |
||||
09.12.2018, 21:51 [ТС] |
3 |
|||
Спасибо за подсказку, убрал галку — «Использовать системные разделители». Win не трогал. Меняет запятую на точку, но только, если в Excel разделитель — запятая, то для того, чтобы была поставлена точка, ячейку обязательно предварительно нужно перевести в текстовый формат:
0 |
Burk 1813 / 1135 / 346 Регистрация: 11.07.2014 Сообщений: 4,002 |
||||||||
10.12.2018, 05:40 |
4 |
|||||||
A_Qz,
Excel разделитель — запятая, то для того, чтобы была поставлена точка, ячейку обязательно предварительно нужно перевести в текстовый формат: Так надо поставить разделитель — точку и всё работает, привожу макросы, на которых проверял
Добавлено через 24 минуты
0 |
A_Qz 31 / 8 / 4 Регистрация: 21.01.2018 Сообщений: 53 |
||||||||
10.12.2018, 18:40 [ТС] |
5 |
|||||||
Это все понятно. Но мне нужно было, что бы при разделителе — запятая, сохранялась после замены точка. С тем, что бы я мог этот файл экспортировать в другие программы, где разделитель — точка. Ход действий был такой: убрал галку «Использовать системные разделители» и поправил код
В этом коде все работает так, как мне надо. sB была определена как String ранее.
Спасибо ещё раз.
0 |
Артём Москвитин Пользователь Сообщений: 46 |
#1 08.02.2022 11:27:32 Здраствуйте уважаемые форумчане, проблема в следующем: в прайс-листе нужно заменить символ , (запятая) на . (точку) в столбцах M, P, T, Поделитесь пожалуйста формулой или макросом, а то работала встала, вот этот макрос почему то не работает, всю голову уже сломал!
Прикрепленные файлы
|
||
отмечаете 3 названных столбца, Ctrl+H Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Со столбцом M так не получается, он выдаёт не понять что, даже если формат ячеек изменить! |
|
да, умеет Excel на лету преобразовать данные («помочь пользователю»), вы ему 2.3, а он вам в ответ на это 02.03.2022 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#5 08.02.2022 14:34:56 Артём Москвитин,
верно, если точка является разделителем даты на компе (для русской локали обычно так и есть)
а вот это не так. Excel всё равно преобразует в дату и плевать он хотел на текстовый формат Итого: если нужно изменить, но не получить при этом дату, то только макросом (или добавлять, например, «_» перед данными, чтобы однозначно отнести их к тексту)
Изменено: Jack Famous — 08.02.2022 14:43:25 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|||||
_Igor_61 Пользователь Сообщений: 3007 |
#6 08.02.2022 15:17:18
Сталкивался, согласен с выводом. |
||
Msi2102 Пользователь Сообщений: 3137 |
#7 08.02.2022 16:04:56
Есть ещё вариант, выделяем столбец в Excel —>Ctrl+C, открываем в Word —> Ctrl+V, —> Ctrl+H с запятой на точку, —>Ctrl+C, возвращаемся в Excel, меняем формат столбца на Текстовый и вставляем только значения. И чудо!!! |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#8 08.02.2022 16:16:50
чудес не бывает. Взрослый дядя, а всё верите Изменено: Jack Famous — 08.02.2022 16:17:16 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Артём Москвитин Пользователь Сообщений: 46 |
#9 08.02.2022 16:22:46
Макрос случаем не знаете? Макрос который я выложил он работает, но почему то с этим прайсом не хочет! |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#10 08.02.2022 16:32:52
ещё как знаю — как раз писал, раз сказал
Принцип: цикл по всем областям выделенного диапазона; если в области хоть в одной ячейке есть запятая, то меняет формат всей области на текстовый и вставляет значения всей области (заменив перед этим нужные, разумеется) в «подготовленное место» Можно, конечно, ещё выяснять кодом, какие разделители допустимы для даты на устройстве — может и формат менять не придётся, но тогда ещё больше кода будет, да и не для вашего случая Изменено: Jack Famous — 08.02.2022 16:42:40 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|||
_Igor_61 Пользователь Сообщений: 3007 |
Артем, Вы выложили одну строчку кода а файл xlsx, в таких файлах макросы не живут. Если действительно хотите решить задачу — покажите в файле xlsm что именно и где не так. Не исключено, что дело не в точках и запятых. Если проблема в точках и запятых — внимательно прочитайте #2. Если не поможет — рассказывайте и показывайте что и как не получается. Если уж работаете с макросами, то не исключено, что что-то на проблемный столбец влияет |
Артём Москвитин Пользователь Сообщений: 46 |
#12 08.02.2022 16:39:43
Благодарю Вас, Спасибо большое, всё работает! Кучу времени сэкономили ))) |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Артём Москвитин, пожалуйста — обращайтесь Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Msi2102 Пользователь Сообщений: 3137 |
#14 08.02.2022 17:00:11
Я ж это не для Вас пишу, что чудо, а чудо для многих по ту сторону экрана, которые сидят и в панике пытаются, что-то сделать, а на форуме никто не отвечает или вставили макрос, один раз попользовались и забыли где он лежит и всё, нужно заново тему создавать на форуме, ведь искать старую никто не будет. А копипастить умеют большее количество людей.
Проще именно для Вас, но не для пользователя, который не знает, что с этим макросом делать и куда его вставлять. |
||||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#15 08.02.2022 17:19:16
всё он знает — вы вообще читаете тему? Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Msi2102 Пользователь Сообщений: 3137 |
#16 08.02.2022 17:27:04
А Вы? Первым предложил копипастить Ігор Гончаренко, я лишь предложил вариант который сработает |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#17 08.02.2022 17:53:14
да что вы говорите — ну почитайте ещё раз
и да — выполнить макрос, который мгновенно выдаст результат куда проще, чем копипастить данные между приложениями и производить замены руками Изменено: Jack Famous — 08.02.2022 17:56:20 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||||
Msi2102 Пользователь Сообщений: 3137 |
#18 08.02.2022 18:14:57
Ошибся, нужно было CTRL+H |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Msi2102, это неважно на самом деле Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Anchoret Пользователь Сообщений: 1059 Anchoret |
#20 09.02.2022 03:34:00 Jack Famous, для обхода Selection Areas не нужны.
|
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#21 09.02.2022 08:18:59
спасибо — я в курсе)) Поячеечный перебор — это как раз подход «в лоб» Изменено: Jack Famous — 09.02.2022 08:19:42 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Замена запятой на точку |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Кажется, это продолжение моего ответа на ваш предыдущий вопрос, но если это так, я думаю, вы неправильно поняли, что я имел в виду. Я взял ваш код и изменил его по своему предложению, но я его не проверял:
Public Sub VirgulaPunct()
Dim oRow As Range
Dim cell As Range
Dim i As Long, j As Long
Dim MyString As String
Dim aux As String
Application.ScreenUpdating = False
For i = Selection(Selection.Count).Row To Selection.Cells(1, 1).Row Step -1
For j = Selection(Selection.Count).Column To Selection.Cells(1, 1).Column Step -1
MyString = Cells(i, j).Value
MyString = Replace(MyString, ",", ";+;", 1)
MyString = Replace(MyString, ".", ",", 1)
MyString = Replace(MyString, ";+;", ".", 1)
Cells(i, j).Value = MyString
Next j
Next i
Application.ScreenUpdating = True
End Sub
Итак, как я сказал в своем предыдущем ответе, я делаю 3 вызова Replace
, но я делаю их для всей строки, а не для каждого символа в строке.
Для дальнейшего использования, вероятно, было бы лучше, если бы вы обновили свой исходный вопрос, а не создавали новый, а затем вы могли бы оставить мне комментарий под моим ответом, и я видел, что вы это сделали.