при замене на экране все нормально, макросом — просто убирает точки, запятые не вставляет. 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 Пользователь Сообщений: 4339 |
— А символ десятичного разделителя чисел 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 Пользователь Сообщений: 4339 |
{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 Пользователь Сообщений: 4339 |
{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 Пользователь Сообщений: 4339 |
{quote}{login=dl}{date=02.06.2008 08:40}{thema=val и cdbl}{post}Если есть возможность занести значения в эксель как текст с точкой (если установленный разделитель запятая то любые цифры разделённые точкой воспринимаются общим форматом как текст) ‘функция вал работает только с us-строками |
слэн Гость |
#30 05.06.2008 14:51:16 «спешу» предоставить уважаемому сообществу третий способ преобразования, еще более быстрый.. ps мне этот способ не понадобился — я обошелся вообще без преобразования(вернее оно выполняется встроенными средствами иксель при открытии текстового файла). Надо конечно попробовать упомянутый ZVI способ чтения файла в переменную.. Прикрепленные файлы
|
Не меняется точка на запятую |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
I have this number format :
39289.95
And i want it to look like :
39289,95
My problem is that if i use :
str_replace('.', ',', $data)
or
strtr($data, '.', ',')
or
number_format($data, 2, ',', '')
I get
39289.00
I tried to cast the variable in string before using str function but no luck it always give me a ‘dot’ and 2 zeros at the end. How can i format my data to look like 39289,95 ?
Note that the data is coming from a odbc plugin, but i don’t think it change anything. It does seems like an easy problem but all i tried was ‘supposed’ to work as i searched in many forum and stackoverflow questions but mine doesn’t.
Thank you.
EDIT(full code):
while (odbc_fetch_row($r)) {
printf("<tr class='ter%s' >",trim(odbc_result($r,1)));
printf("<td> %s</td>",odbc_result($r,1));
$data = odbc_result($r,2);
$str = preg_replace('/./', ',', $data);
//$data = number_format($data, 2, '.', '');
//$data = strtr($data, ".", ",");
//$data = str_replace('.',',',$data);
printf("<td align=right> %6.2f</td>",$str);
echo "</tr>n";
}
}
Точка вместо запятой дробных чисел может привести к существенным последствиям при расчетах в программе Excel. Чаще всего такие ошибки случаются, когда импортируются данные в таблицу из других источников.
Если в дробных числах вместо запятой стоит точка, то программа автоматически воспринимает их как текстовый тип данных. Поэтому перед тем как выполнять математические расчеты и вычисления следует отформатировать и подготовить импортированные данные.
Как в Excel заменить точку, на запятую?
Выделите и скопируйте данные из ниже приведенной таблицы:
№ п/п | Валютная пара | Пересчет | Продажа | Покупка | Спрэд |
1 | EUR/USD | 1 | 1.1347 | 1.1350 | 0.0003 |
2 | GBP/USD | 1 | 1.5438 | 1.5442 | 0.0004 |
3 | USD/CHF | 1 | 0.9543 | 0.9547 | 0.0004 |
4 | USD/JPY | 100 | 1.1948 | 1.1945 | -0.0003 |
Теперь перейдите на рабочий лист и щелкните правой кнопкой мышки по ячейке A1. Из появившегося контекстного меню выберите опцию «Специальная вставка». В диалоговом окне выберите «Текст в кодировке Unicode» и нажмите ОК.
Как видно Excel распознает числа только в колонке C. Значения в этой колонке выровнены по правой стороне. В других колонках по левому краю. Во всех ячейках формат по умолчанию «Общий», а в ячейках D3, D5, E3, E5 вообще отображается формат «Дата». Мы копировали данные через специальную вставку и все форматы исходной таблицы устранены. Причина только одна – вместо запятой стоит точка. Такой тип данных не подготовлен и его нельзя использовать для вычислений.
Примечание. Если копировать данные из других источников без специальной вставки, то вместе с данными копируется и формат. В таком случаи формат ячеек «Общий» (по умолчанию) может быть изменен. Тогда нельзя визуально отличить, где распознано число, а где текст.
Все последующие действия необходимо выполнять с чистого листа. Удалите все, что есть на листе или откройте новый для дальнейшей работы.
Чтобы заменить точку, на запятую в импортированных данных можно использовать 4 способа:
Способ 1 замена точки на запятую в Excel через Блокнот
Программа Блокнот Windows не требует использования сложных настроек и функций, а лишь выступает посредником в копировании и предварительной подготовки данных.
- Скопируйте данные из исходной таблички на этой странице. Откройте программу Блокнот Windows («Пуск»-«Все программы»-«Стандартные»-«Блокнот») и вставьте в него скопированные данные для подготовки.
- Выберите в меню «Правка» опцию «Заменить» (или комбинацию горячих клавиш CTRL+H). В появившимся диалоговом окне, введите в поле: «Что» точку (.), а в поле «Чем» запятую (,). И нажмите кнопку «Заменить все».
Программа Блокнот заменила все точки, на запятые. Теперь данные готовы для копирования и вставки на лист.
Это весьма простой, но очень эффективный способ.
Способ 2 временно меняем настройки Excel
Перед тем как поменять точку на запятую в Excel правильно оцените поставленную задачу. Возможно, лучше заставить программу временно воспринимать точку, как разделитель десятых в дробных числах. Просто в настройках мы указываем, что в дробных числах разделитель точка вместо запятой.
Для этого нужно открыть «Файл»-«Параметры»-«Дополнительно». В разделе «Параметры правки» следует временно убрать галочку «Использовать системные разделители». А в поле «Разделитель целой и дробной части» следует удалить запятую и ввести точку.
После выполнения вычислений настоятельно рекомендуется вернуть настройки по умолчанию.
Внимание! Данный способ сработает, если сделать все изменения до импорта данных, а не после.
Способ 3 временно меняем системные настройки Windows
Принцип этого способа похож на предыдущий. Только здесь мы меняем похожие настройки в Windows. В настройках региональных стандартов операционной системы нужно заменить запятую, на точку. Теперь подробнее о том, как это сделать.
Открываем «Пуск»-«Панель управления»-«Языки и региональные стандарты». Нажимаем на кнопку «Дополнительно». В появившимся окне изменяем в первом поле «Разделитель целой и дробной части» — вводим нужное нам значение. Дальше ОК и ОК.
Внимание! Если вы откроете этот файл на другом компьютере, где установлены другие системные параметры региональных стандартов, то могут возникнуть проблемы с вычислениями.
Способ 4 используем функцию найти и заменить в Excel.
Данный способ похож на первый. Только здесь мы используем ту же функцию из Блокнота, но уже в самом Excel.
В этом способе, в отличие от выше приведенных, мы сначала вставляем скопированную табличку на чистый лист, а потом подготавливаем ее к выполнению вычислений и расчетов.
Важным недостатком данного способа является сложность его реализации, если некоторые дробные числа с точкой после вставки были распознаны как дата, а не как текст. Поэтому мы сначала избавимся от дат, а потом разберемся с текстом и точками.
- Предварительно выделите столбцы где будут находится дробные числа с точкой в качестве разделителя. В данном случаи это 3 столбца D:F.
- Установите для выделенного диапазона текстовый формат ячеек, чтобы заранее избежать автоматического преобразования в формат даты некоторых чисел. Для этого выберите текстовый формат из выпадающего списка на закладке «Главная» в разделе «Число». Или нажмите CTRL+1 , в появившимся окне «Формат ячеек» выберите закладку «Число», а в разделе «Числовые форматы» укажите «Текстовый».
- Скопируйте таблицу и щелкните правой кнопкой мышки по ячейке A1. Из контекстного меню выберите опцию «Специальная вставка». Выберите «Текст в кодировке Unicode» и нажмите ОК. Обратите внимание, как теперь отображаются значения в ячейках: D3, D5, E3, E5, в отличии от самого первого копирования таблицы.
- Нажмите на инструмент «Главная»-«Найти и выделить»-«Заменить» (или нажмите комбинацию CTRL+H).
- В появившемся окне введите в поле «Найти» — точку, а в во второе поле введите запятую. И нажмите «Заменить все».
- Снова выделите 3 столбца D:F и измените формат ячеек на «Числовой» CTRL+SHIFT+1. Не забудьте увеличить разрядность до 4-х, как описано в пункте №2.
Все точки сменились на запятые. А текст автоматически преобразился в число.
Вместо 4-го и 5-го пункта можно использовать в отдельной колонке формулу с функциями:
Например, выделите диапазон ячеек G2:I5, введите эту формулу и нажмите CTRL+Enter. А потом переместите значения ячеек диапазона G2:I5 в диапазон D2:F5.
Эта формула находит в тексте точку с помощью функции НАЙТИ. Потом вторая функция меняет ее на запятую. А функция ЗНАЧЕН преобразует полученный результат в число.
Нет ошибки. в VBA разделитель целой и дробной части — точка, на листе Excel в русской локали — запятая. При вставке на лист числа разделитель автоматически преобразуется в нужный.
Значение типа 43.64.78 — текст, в нем нет разделителя числовых данных, точка — часть текста, поэтому при вставке на лист символы не подменяются.
Если в данных, которые могут быть преобразованы, точки нужно сохранить, вставлять данные как текстовые (апостроф слева, лишний пробел…) или изначально задать формат столбца текстовым.
to.Cells[1, 1].Value = "'43.64";
апостроф слева сигнализирует, что после него текст. В ячейке апостроф не отображается.