Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Замена точки на запятую в excel 2010 / 16 сообщений из 16, страница 1 из 1
29.04.2015, 17:48
    #38948924
Sevolod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Наверняка это обсуждалось, но не могу найти. Разделитель разрядов - запятая. В ячейке число 1234,456.

Записываю макрос замены точки на запятую. При записи макроса Excel выдает сообщение о том, что заменять нечего. Это верно. Теперь запускаю записанный макрос.

Код: vbnet
1.
2.
    Cells.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False



и получаю 1234456. Как с этим бороться?
...
Рейтинг: 0 / 0
29.04.2015, 17:56
    #38948935
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Есть значение, которое хранится в ячейке (числовое), а есть его отображение (форматирование)

Не очень понятно, чего вы хотите добиться в итоге. Превратить число в текст? Текст в число? Изменить формат отображения чисел?
...
Рейтинг: 0 / 0
29.04.2015, 17:56
    #38948937
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
SevolodВ ячейке число 1234,456.В ячейке может быть число, а может быть текст, зависит от обстоятельств, как оно туда попало.

Лучше приложите файл и объясните, чего надо добиться
...
Рейтинг: 0 / 0
29.04.2015, 18:01
    #38948942
Sevolod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Shocker.Pro, я хочу, чтобы со значением в этой ячейке ничего не произошло.
...
Рейтинг: 0 / 0
29.04.2015, 18:06
    #38948949
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Sevolodхочу, чтобы со значением в этой ячейке ничего не произошло.Хорошее пожелание. Если с ячейкой ничего не будете делать, то ничего и не произойдет - в чем проблема?
...
Рейтинг: 0 / 0
29.04.2015, 19:53
    #38949022
Sevolod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Shocker.Pro,

запускаю макрос, который находится в книге, приложенный к предыдущему сообщению. Предполагается, что макрос поменяет точку на запятую. Так как разделитель разрядов = ",", а в этой ячейке число, то макрос, казалось бы, не должен ничего сделать. Однако он меняет содержимое ячейки.
...
Рейтинг: 0 / 0
29.04.2015, 20:39
    #38949056
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Sevolodи получаю 1234456. Как с этим бороться?Попробуйте заменять точку на точку.
...
Рейтинг: 0 / 0
29.04.2015, 21:53
    #38949087
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Еще раз - чего требуется добиться? В конечном итоге.
Если требуется добиться, чтобы в ячейке ничего не менялось, не запускайте макрос.
Если требуется замена в других ячейках, не включайте эту ячейку в область замены.

Макрос с числами работает в американском формате. То есть разделитель десятичных разрядов - точка, а запятая - разделитель тысяч. В итоге, макрос убирает десятичный разделитель (запятая не играет роли для получения числа) и кладет число обратно в ячейку. Там оно уже форматируется в соответствии с национальными стандартами.
...
Рейтинг: 0 / 0
29.04.2015, 22:16
    #38949092
uux
uux
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Sevolodполучаю 1234456. Как с этим бороться?

Я бы попробовал так:

(1) Считать значение из ячейки в строковую переменную.
(2) В строковой переменной (а не в ячейке) поменять точку на запятую.
(3) Преобразовать полученную строку в число.
(4) Записать получившееся значение обратно в ячейку.

Хотя это, конечно, "костыли":).
...
Рейтинг: 0 / 0
29.04.2015, 22:38
    #38949104
Sevolod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
The_Prist, ну да. Получилось, меняя точку на точку. А это где-нибудь описано в документации по Экселю? Есть ли ограничения у такого странного на вид метода?

Shoker.Pro В конечном итоге я хочу, чтобы макрос, который записывается при выборе пункта меню "найти и заменить", работал, как пункт меню "найти и заменить".

Shoker.Pro"в итоге, макрос убирает десятичный разделитель (запятая не играет роли для получения числа) и кладет число обратно в ячейку. ". Ну да. Выглядит похоже, но все немного сложнее. Если у числа два знака после запятой, а не три, то замена точки на запятую обычным образом происходит нормально.
...
Рейтинг: 0 / 0
29.04.2015, 22:42
    #38949106
Sevolod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
uux, ну да, наверное, такие костыли помогут. Но, во-первых, - дело в скорости. Во-вторых, хочется на будущее понять - почему такие проблемы.
...
Рейтинг: 0 / 0
29.04.2015, 23:36
    #38949135
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
SevolodShoker.Pro В конечном итоге я хочу, чтобы макрос, который записывается при выборе пункта меню "найти и заменить", работал, как пункт меню "найти и заменить".мы уже выяснили, что этого не происходит. И это - не первый случай, когда записанный макрос не работает точно так же, как действия пользователя при его записи.
...
Рейтинг: 0 / 0
30.04.2015, 07:12
    #38949174
uux
uux
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Sevoloduux, ну да, наверное, такие костыли помогут. Но, во-первых, - дело в скорости. Во-вторых, хочется на будущее понять - почему такие проблемы.

Почему такие проблемы - понятно, это явный глюк Экселя (вот эта вот ваша фраза прекрасно это иллюстрирует):

SevolodЕсли у числа два знака после запятой, а не три, то замена точки на запятую обычным образом происходит нормально.

А с глюками бороться можно или обходными технологиями (они же "костыли"), или шаманством с бубном и заячьей лапкой (это про предложенный The_Prist метод замены точки на точку), больше особо вариантов нет. На то они и глюки:).

Про "дело в скорости" - не уверен, что предложенные мной костыли работают медленнее, чем стандартная автозамена, и даже если это действительно так, что это замедленее будет хоть как-то заметно на вашей задаче. Другое дело, что это потребует написания некоторого кода, и, если замена точки на точку устраивает, то действительно - зачем заморачиваться? ;)
...
Рейтинг: 0 / 0
30.04.2015, 12:58
    #38949604
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Это не глюк.
Это документированная особенность.

VBA использует региональные разделители групп разрядов и целой и дробной части, принятые для USA. А там разделитель групп разрядов запятая, а разделитель целой и дробной части - точка.
И следует отметить, что реализация метода Replace на уровне VBA и на уровне вызванной через Ctrl+H формы различается.

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

Если грубо описать процесс:
Вызывая напрямую из Excel метод Replace - в эту внутреннюю процедуру передается локализация для приложения Excel. В Вашем случае русская. И во внутреннюю процедуру передаются разделители, установленные для Excel.
А вызывая из VBA - передается локализация VBA(это все же другое приложение, встроенное в Excel). А у VBA она как правило всегда англ.USA. И используемые им разделители.

Таким образом вот что происходит при замене через Excel(Ctrl+H):
-он находит точку, меняет её на запятую. Проверяет в соответствии с установленными разделителями является ли полученный текст числом. Если да - преобразует. Вас это устраивает, т.к. никакого расхождения с логикой пользователя не происходит.

Что происходит при вызове метода из VBA:
-он заменяет корректно точку на запятую, но в этот же момент Excel пытается определить тип полученного значения, но уже не учитывая установленную локализацию, а опирается только на принятые для VBA(т.к. в процедуру переданы разделители, установленные для него). Поэтому запятую он считает разделителем групп разрядов и тем самым "съедает" часть дробную.

Таким образом происходит эта оказия именно потому, что метод Replace передает во внутреннюю процедуру "приложение", которое его вызвало и использует его локализацию.

Как-то так...
...
Рейтинг: 0 / 0
30.04.2015, 13:14
    #38949630
Sevolod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
The_Prist, интересно.

А можете привести фрагмент документации, где об этом сказано?
...
Рейтинг: 0 / 0
30.04.2015, 14:16
    #38949701
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена точки на запятую в excel 2010
Sevolod,

нет, к сожалению. Я читал это довольно давно и ссылку не сохранил(читал подряд MSDN, где описаны внутренние алгоритмы методов и свойств объектов и передаваемые параметры).
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Замена точки на запятую в excel 2010 / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]