A_Qz 31 / 8 / 4 Регистрация: 21.01.2018 Сообщений: 53 |
||||||||
1 |
||||||||
Excel Замена запятой на точку09.12.2018, 11:23. Показов 20227. Ответов 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 |
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.
при замене на экране все нормально, макросом — просто убирает точки, запятые не вставляет. 2 более красиво ставлю автозамену точки на запятую.. как еще? |
|
Меняем числа в текстовом формате с не тем разделителем дробной части на числовой формат? Или я не так понял? |
|
да! правда и я мог не так понять .. |
|
вот файл. поменяйте мне точки на запятые |
|
Ctrl+H, «.» на «,». Лист NEW. |
|
а первый мой пост читали? макросом мне надо! |
|
{quote}{login=слэн}{date=27.05.2008 03:25}{thema=}{post}вот файл. поменяйте мне точки на запятые{/post}{/quote}В результате должны получится числа или должен остаться текст? |
|
нужно макросом и с наибольшей скоростью ибо данных может быть много |
|
На первый вопрос, содержащий «или», ответ «да» непонятен. |
|
на самом деле ответ совершенно верен уж из текста числа я сделаю.. но, подчиняясь , в конечном виде нужны числа, и, значит, будем считать это ответом на первую часть вопроса, после получения которого, ответ на вторую часть будет очевиден |
|
{quote}{login=Лузер™}{date=27.05.2008 04:03}{thema=}{post}На первый вопрос, содержащий «или», ответ «да» непонятен. врят ли — но щас попробуююю |
|
снимаю шляпу — работает. теперь объясните разницу.. |
|
Вариант: |
|
{quote}{login=слэн}{date=27.05.2008 04:18}{thema=}{post}снимаю шляпу — работает. теперь объясните разницу.. |
|
да, возможно. еще раз спасибо |
|
ZVI Пользователь Сообщений: 4328 |
— А символ десятичного разделителя чисел Excel зависит еще и от того, использованы ли системные разделители через меню: Сервис – Параметры – Международные — Использовать системные разделители. Если не учитывать этот факт, то возможны ошибки в определении правильного знака десятичного разделителя для числовых ячеек. Например: При этом Application.DecimalSeparator выдаст точку, а Excel-ю для числовых ячеек нужна запятая. Чтобы не зависеть от подобных накладок я использую такую функцию: ‘ Символ десятичного разделителя — |
zvi, больше интересовала другая особенность: при непосредственном указании Range(Cells(2, 4), Cells(i, 7)).Replace What:=».», Replacement:=»,», LookAt:=xlPart, _ точки убираются, но запятые не появляются при Range(Cells(2, 4), Cells(i, 7)).Replace What:=».», Replacement:=Application.DecimalSeparator, LookAt:=xlPart, _ все нормально, точки меняются на запятые |
|
{quote}{login=ZVI}{date=28.05.2008 01:37}{thema=Re:}{post}— А символ десятичного разделителя чисел Excel зависит еще и от того, использованы ли системные разделители через меню: Сервис – Параметры – Международные — Использовать системные разделители. Если не учитывать этот факт, то возможны ошибки в определении правильного знака десятичного разделителя для числовых ячеек. Например: При этом Application.DecimalSeparator выдаст точку, а Excel-ю для числовых ячеек нужна запятая. Чтобы не зависеть от подобных накладок я использую такую функцию: ‘ Символ десятичного разделителя — |
|
ZVI Пользователь Сообщений: 4328 |
{quote}{login=слэн}{date=28.05.2008 09:47}{thema=}{post}zvi, больше интересовала другая особенность: при непосредственном указании Range(Cells(2, 4), Cells(i, 7)).Replace What:=».», Replacement:=»,», LookAt:=xlPart, _ точки убираются, но запятые не появляются при Range(Cells(2, 4), Cells(i, 7)).Replace What:=».», Replacement:=Application.DecimalSeparator, LookAt:=xlPart, _ все нормально, точки меняются на запятые{/post}{/quote} Функция DecSep() мною была приведена в развитие темы, так как звучало «и с наибольшей скоростью ибо данных может быть много». С этой функцией замена текстовых ячеек на числовые работает в 2-3 раза быстрее, чем Replace. На моем компе — примерно в 2.9 раза быстрее. Для того, чтобы сравнить эффективность 2-х методов замены прилагаю файл небольшой тест-системы с подробными комментариями. |
ZVI, безусловно, Вы нам уже не раз доказывали, что считать массив, обработать, записать гораздо быстрее, чем непосредственная обработка экселем. |
|
ZVI, простите, но я нашел у Вас ошибку. |
|
Придумал метод 3 |
|
ZVI Пользователь Сообщений: 4328 |
{quote}{login=Лузер™}{date=29.05.2008 09:21}{thema=}{post}ZVI, простите, но я нашел у Вас ошибку. Ваша идея с манипуляцией .UseSystemSeparators и .DecimalSeparator замечательная! Смогу подключиться к проблеме уже на выходных. |
Она не совсем не работает. Я эксперементировал с запятой и получил работающий код. На радостях выложил. Продолжил эксперименты с разделителем «%» — не работает. Вернулся к запятой, снова не работает. |
|
{quote}{login=Лузер™}{date=30.05.2008 10:24}{thema=}{post}Она не совсем не работает. Я эксперементировал с запятой и получил работающий код. На радостях выложил. Продолжил эксперименты с разделителем «%» — не работает. Вернулся к запятой, снова не работает. вот-вот но ваш первый код работает(у меня) без проблем.(это с replace и decimalseparator) вообще мне нужно было: файлов может быть до 1000 в конечной таблице строк до 800 000 сейчас работаю с 60 000 строк основной таблицы — для этого требуется обработать около 40 файлов — на генерацию таблицы уходит 27сек |
|
Если есть возможность занести значения в эксель как текст с точкой (если установленный разделитель запятая то любые цифры разделённые точкой воспринимаются общим форматом как текст) ‘функция вал работает только с us-строками |
|
ZVI Пользователь Сообщений: 4328 |
{quote}{login=dl}{date=02.06.2008 08:40}{thema=val и cdbl}{post}Если есть возможность занести значения в эксель как текст с точкой (если установленный разделитель запятая то любые цифры разделённые точкой воспринимаются общим форматом как текст) ‘функция вал работает только с us-строками |
слэн Гость |
#30 05.06.2008 14:51:16 «спешу» предоставить уважаемому сообществу третий способ преобразования, еще более быстрый.. ps мне этот способ не понадобился — я обошелся вообще без преобразования(вернее оно выполняется встроенными средствами иксель при открытии текстового файла). Надо конечно попробовать упомянутый ZVI способ чтения файла в переменную.. Прикрепленные файлы
|
Как в ячейке точку заменить запятой?
- Bananovyy
- Новичок
- Сообщения: 25
- Зарегистрирован: 03.08.2008 (Вс) 16:04
Как в ячейке точку заменить запятой?
Как в ячейке точку заменить запятой, преобразовав тем самым слово в число?
Код записанный рекордером не работает:
Sub Макрос1()
Range(«A1:A10»).Select
Selection.Replace What:=».», Replacement:=»,», LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
- Wasup!
- Продвинутый пользователь
- Сообщения: 120
- Зарегистрирован: 21.06.2005 (Вт) 11:09
Re: Как в ячейке точку заменить запятой?
Wasup! » 27.10.2008 (Пн) 12:48
Как вариант
- Код: Выделить всё
For Each c In Range("A1:A10")
c.Value = Replace(c.Value, ".", ",")
Next
А вообще не точка или запятая определяют число это или текст, а региональные настройки конкретного компьютера (см. панель управления Regional and Language settings).
Быстро определить текущий разделитель:
- Код: Выделить всё
? format$(0,".")
- Bananovyy
- Новичок
- Сообщения: 25
- Зарегистрирован: 03.08.2008 (Вс) 16:04
Re: Как в ячейке точку заменить запятой?
Bananovyy » 01.11.2008 (Сб) 12:45
Wasup! писал(а):Как вариант
- Код: Выделить всё
For Each c In Range("A1:A10")
c.Value = Replace(c.Value, ".", ",")
NextА вообще не точка или запятая определяют число это или текст, а региональные настройки конкретного компьютера (см. панель управления Regional and Language settings).
Быстро определить текущий разделитель:
- Код: Выделить всё
? format$(0,".")
Получается та же ересь,
Пример:
1.11111 > 111 111
11.1111 > 111 111
111.111 > 111 111
1111.11 > 1111,11
11111.1 > 11111,1
Первые три строчки бредово преобразуются в число = 111 111 ?!?
Две последние точно меняют зпт на тчк, но при этом формат остается текстовый
с примечанием о преобразовании в число…
Суть сей операции в следующем:
Из Oracle вытаскивается массив данных, вставляется в Excel, все данные там забиты в текстовом формате, включая циферки… и каждый раз приходится делать лишние телодвижения через меню: Правка / Заменить ТЧК на ЗПТ… Необходимо текст преобразовать в циферки для возможности дальнейших расчётов-пересчётов этих циферок!!!… Что делать Х.З.
Последний раз редактировалось Bananovyy 01.11.2008 (Сб) 13:06, всего редактировалось 2 раз(а).
- Денис
- Доктор VB наук
- Сообщения: 2734
- Зарегистрирован: 07.11.2006 (Вт) 13:55
- Откуда: Ейск, Краснодарский край
-
- ICQ
Re: Как в ячейке точку заменить запятой?
Денис » 01.11.2008 (Сб) 12:49
Bananovyy
Панель управления -> Язык и региональные стандарты -> Настройка -> Числа -> Разделитель целой и дробной части
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.
- Bananovyy
- Новичок
- Сообщения: 25
- Зарегистрирован: 03.08.2008 (Вс) 16:04
Re: Как в ячейке точку заменить запятой?
Bananovyy » 01.11.2008 (Сб) 13:00
Денис писал(а):Bananovyy
Панель управления -> Язык и региональные стандарты -> Настройка -> Числа -> Разделитель целой и дробной части
Там стоит запятая?!?
- Денис
- Доктор VB наук
- Сообщения: 2734
- Зарегистрирован: 07.11.2006 (Вт) 13:55
- Откуда: Ейск, Краснодарский край
-
- ICQ
Re: Как в ячейке точку заменить запятой?
Денис » 01.11.2008 (Сб) 13:16
Bananovyy писал(а):
Денис писал(а):Bananovyy
Панель управления -> Язык и региональные стандарты -> Настройка -> Числа -> Разделитель целой и дробной частиТам стоит запятая?!?
Так. Начнем с самого начала: Откуда в твоих ячейках взялись числа с точками вместо запятых?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.
- Bananovyy
- Новичок
- Сообщения: 25
- Зарегистрирован: 03.08.2008 (Вс) 16:04
Re: Как в ячейке точку заменить запятой?
Bananovyy » 01.11.2008 (Сб) 13:27
Денис писал(а):
Bananovyy писал(а):
Денис писал(а):Bananovyy
Панель управления -> Язык и региональные стандарты -> Настройка -> Числа -> Разделитель целой и дробной частиТам стоит запятая?!?
Так. Начнем с самого начала: Откуда в твоих ячейках взялись числа с точками вместо запятых?
Суть сей операции в следующем:
Из Oracle вытаскивается массив данных, вставляется в Excel, все данные там забиты в текстовом формате, включая циферки… и каждый раз приходится делать лишние телодвижения через меню: Правка / Заменить ТЧК на ЗПТ… Необходимо текст преобразовать в циферки для возможности дальнейших расчётов-пересчётов этих циферок!!!…
[alibek] :: Не стоит редактировать модераторские замечания.
Последний раз редактировалось Bananovyy 01.11.2008 (Сб) 14:22, всего редактировалось 1 раз.
- iGrok
- Артефакт VBStreets
- Сообщения: 4272
- Зарегистрирован: 10.05.2007 (Чт) 16:11
- Откуда: Сетевое сознание
Re: Как в ячейке точку заменить запятой?
iGrok » 01.11.2008 (Сб) 13:47
1) Мат, пусть даже скрытый, в конференции запрещён. Не стоит нарушать это правило.
2) По сабжу: Ну так вытаскивай из Оракла цифры! Каким-таким хитрым образом ты вытаскиваешь данные так, что у тебя там получается текст вместо цифр?
label:
cli
jmp label
- Bananovyy
- Новичок
-
- Сообщения: 25
- Зарегистрирован: 03.08.2008 (Вс) 16:04
Re: Как в ячейке точку заменить запятой?
Bananovyy » 01.11.2008 (Сб) 13:49
iGrok писал(а):1) Мат, пусть даже скрытый, в конференции запрещён. Не стоит нарушать это правило.
2) По сабжу: Ну так вытаскивай из Оракла цифры! Каким-таким хитрым образом ты вытаскиваешь данные так, что у тебя там получается текст вместо цифр?
Ну так нельзя))))))))))
- iGrok
- Артефакт VBStreets
- Сообщения: 4272
- Зарегистрирован: 10.05.2007 (Чт) 16:11
- Откуда: Сетевое сознание
Re: Как в ячейке точку заменить запятой?
iGrok » 01.11.2008 (Сб) 14:09
Как нельзя, чего нельзя? Из Оракла цифры вытащить вместо текста? Можно.
А чего ещё нельзя?
Приведение текста к числу выглядит, к примеру, так:
- Код: Выделить всё
text="100.10"
dec_delim=format$(0,".")
value=cdbl(replace(text,".",dec_delim))
Это если разделитель изначально точка.
А то, что там бредово преобразуется.. Ну покажи наконец код которым делаешь.
label:
cli
jmp label
- Bananovyy
- Новичок
- Сообщения: 25
- Зарегистрирован: 03.08.2008 (Вс) 16:04
Re: Как в ячейке точку заменить запятой?
Bananovyy » 01.11.2008 (Сб) 14:21
iGrok писал(а):Приведение текста к числу выглядит, к примеру, так:
- Код: Выделить всё
text="100.10"
dec_delim=format$(0,".")
value=cdbl(replace(text,".",dec_delim))
СУПЕР!!! ТО, ЧТО НАДО, ПАСИБОС!!!
- Viper
- Артефакт VBStreets
- Сообщения: 4394
- Зарегистрирован: 12.04.2005 (Вт) 17:50
- Откуда: Н.Новгород
-
- ICQ
Re: Как в ячейке точку заменить запятой?
Viper » 02.11.2008 (Вс) 7:25
Bananovyy писал(а):
iGrok писал(а):Приведение текста к числу выглядит, к примеру, так:
- Код: Выделить всё
text="100.10"
dec_delim=format$(0,".")
value=cdbl(replace(text,".",dec_delim))СУПЕР!!! ТО, ЧТО НАДО, ПАСИБОС!!!
Конечно супер, особенно если учесть, что ответ был дан в первом же сообщении.
Весь мир матрица, а мы в нем потоки байтов!
- Bananovyy
- Новичок
- Сообщения: 25
- Зарегистрирован: 03.08.2008 (Вс) 16:04
Re: Как в ячейке точку заменить запятой?
Bananovyy » 02.11.2008 (Вс) 10:06
Млин, так я же только учусь)))
- Viper
- Артефакт VBStreets
- Сообщения: 4394
- Зарегистрирован: 12.04.2005 (Вт) 17:50
- Откуда: Н.Новгород
-
- ICQ
Re: Как в ячейке точку заменить запятой?
Viper » 02.11.2008 (Вс) 12:17
Bananovyy писал(а):Млин, так я же только учусь)))
Неужели читать?
Весь мир матрица, а мы в нем потоки байтов!
Вернуться в VBA
Кто сейчас на конференции
Сейчас этот форум просматривают: Google-бот и гости: 3