Страницы: 1
RSS
Как преобразовать число с одними разделителями в число с другими разделителями
 
Как преобразовать число с запятой вместо разделителя и точкой вместо запятой в число с разделителем и запятой, учитывая, что возможно такое число уже есть, т.е. наглядно:  
 
Допустим есть числа:  
Строка 1:  2556,24  
Строка 2: 2 556,24  
Строка 3: 2,556.24  
 
Нужно:  
Строка 1: 2 556,24  
Строка 2: 2 556,24  
Строка 3: 2 556,24  
 
Просто когда это несколько строк, это не проблема, а когда их около трех тысяч и то в одной то в другой строке числа стоят настолько различные (1,347.28 и 1 347,28) соответсвенно, то это уже сложнее
 
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;",";);".";)/100  
Будут ошибки с числами без копеек.
 
Мало, что без примера... kulkrise, а поискать по форуму - "текст в число"?
Я сам - дурнее всякого примера! ...
 
kulkrise, можно не сомневаться в том, что Ваша информация - результат экспорта в EXCEL из ПО, эксплуатируемого в Вашей организации, а не "плод рукопашного труда".  
 
Если экспорт такой информации является не "разовым", а регламентным - рекомендую    
внимательно изучить настройки данного шаблона экспорта в EXCEL в Генераторе отчетов в Вашем ПО.  
 
В случае невозможности самостоятельно изменить настройки в вышеуказанном шаблоне экспорта - рекомендую предъявить претензии через Service-Desker ПО в службу автоматизации в Вашей организации.  
 
Общеизвестно: сотрудники службы автоматизации в организации получают зарплату не только за сопровождение ПО, но и за решение подобных вопросов.
 
Kulkrise, добро пожаловать на форум!  
 
Привожу макрос, который выполнит необходимые Вам преобразования в выделенном диапазоне ячеек. Если не знаете, как использовать макросы - напишите.  
Преобразовываются только текстовые значения, которые начинаются с цифры и имеют в третьем справа символе точку или запятую. Все остальные ячейки в выделенном диапазоне, а также ячейки с формулами не преобразовываются, поэтому можно выделять ячейки "с запасом".  
 
' ZVI:2012-09-02 Преобразование текста выделенных ячеек в числа  
' при наличии двух десятичных знаков после десятичной точки/запятой  
Sub TextToNum()  
 Dim a, c&, cs&, ds$, i&, r&, rs&, Rng As Range, v$  
 Set Rng = Selection  
 a = Rng.Formula  
 If Not IsArray(a) Then ReDim a(1, 1): a(1, 1) = Rng.Value  
 rs = UBound(a, 1)  
 cs = UBound(a, 2)  
 For r = 1 To rs  
   For c = 1 To cs  
     If VarType(a(r, c)) = vbString Then  
       i = Len(a(r, c))  
       v = Mid$(a(r, c), 1, 1)  
       If i > 2 And IsNumeric(v) Then  
         v = Trim(a(r, c))  
         ds = Mid$(v, i - 2, 1)  
         If ds = "." Then  
           If InStr(v, ",") Then v = Replace(v, ",", "")  
         ElseIf ds = "," Then  
           Mid(v, i - 2) = "."  
         End If  
         Rng.Cells(r, c).NumberFormat = "#,##0.00"  
         a(r, c) = Val(v)  
       End If  
     End If  
   Next  
 Next  
 Rng.Formula = a  
End Sub
 
ZVI!  
А если экспорт данных из ПО выполняется каждый день?  
А если шаблон экспорта "предъявит" еще какие-либо форматы и макрос потребуется редактировать?  
Почему пользователь должен "загружать" чужими проблемами свое рабочее время?
 
МАРУСЯ, в Ваших словах все правильно и логично... НО...  
ТС задал конкретный вопрос и ZVI на него ответил. Вам надо было эти строки обращать к ТС, а не к ZVI.  
 
Додумывать за кого-то дело не благодарное (испытано на личном опыте)  
________________________  
khafizovtt@gmail.com
Учимся сами и помогаем другим...
 
{quote}{login=МАРУСЯ}{date=03.09.2012 07:12}{thema=}{post}ZVI! А если...? А если...? Почему...?{/post}{/quote}  
МАРУСЯ, здесь форум по Excel, а не по организации работы IT и другого персонала, поэтому я и привожу код по конкретному вопросу автора темы. Гадать про "если" не вижу смысла. Автор темы напишет про свои "если" сама.
 
МАРУСЯ  
Если бы я ждал когда IT шники сделают мне подобные исправления, я бы до сих пор ждал, есть хорошие IT-специалисты, которые делают быстро и нормально, а есть лодыри и тунеядцы.  
А если-бы IT-шники выполняли все мои автоматизации и хотелки то они бы мне темную устроили, бывает что в ПО не реально внести исправления без разработчиков, а в EXCEL нажал кнопочку и все, тем более задачи и у меня периодически меняются, подправил и дальше работаешь, а тут запрос делать ждать пока его рассмотрят выполнят..
Оружие не убивает Человека! Человек убивает Человека!!!
 
ZVI!  
Автор темы пока молчит.  
Это – по минимуму – некорректно.  
Тем паче, что оказана конкретная помощь.  
 
ZVI!  
Ваше право считать, что экстренная помощь – единственное решение проблемы.  
 
Однако, перед оказанием оной было бы неплохо определиться с мелкими, но важными, нюансами:  
1. регламент экспорта информации из ПО;  
2. имеет ли автор темы какой-либо опыт «общения» с макросами;  
3. имеет ли автор темы навыки алгоритмизации и кодирования в случае необходимости редактирования макроса;  
4. умеет ли автор темы импортировать макрос в свой файл.  
 
В случае «неадеквата» автора темы по вышеуказанным вопросам было бы очень даже «не грешно», если бы Ваш макрос «умел»:  
1. работать с внешним файлом:  
1.1. открывать его,    
1.2. считывать исходную информацию из него,    
1.3. закрывать его;  
2. создавать выходной файл (после преобразования информации), готовый для использования.      
 
________________________________________  
 
Borodets!  
Вы уверены, что все пользователи EXCEL такие «продвинутые», как Вы?  
Согласна с тем, что стремиться стать таковым должен каждый, у кого профессиональная деятельность предусматривает использование EXCEL.  
 
В данном случае я говорю всего лишь о «кривом» шаблоне экспорта из ПО, который необходимо:  
1. либо настроить (без изменения ПО),    
2. либо отредактировать (получение новой версии ПО).  
 
Общеизвестно, что время кустарей-разработчиков ПО закончилось.    
На них нет спроса даже в маленьких фирмочках.  
Это – закономерно.  
И АБСОЛЮТНО ПРАВИЛЬНО!!!  
 
Borodets!  
Вы откровенно лукавите, характеризуя Ваших IT-шников... :))))))
 
МАРУСЯ, Ваш задор да в мирных бы целях:) Если бы все делалось так, как Вы описываете, то на форуме была бы тишь и благодать:)  
Реалии таковы что тебе надо работать здесь и сейчас, программа сделана сторонней фирмой и все изменения вносятся после того, как наберется определенное количество обращений по данному вопросу. Так, как Ваш вопрос может быть специфическим - шанс получить результат стремится в бесконечность:)  
Кстати, на форуме делали автоматизацию учета и контроля работы Хелдеска в ЕХСЕL:)
 
Маруся, по поводу Вашего сообщения от 03.09.2012, 21:19 - ZVI ведь ответил, что макрос написан под конкретную задачу, а с Ваших слов получается, что макрос должен быть "на все случаи жизни".  
>> Общеизвестно, что время кустарей-разработчиков ПО закончилось. На них нет спроса даже в маленьких фирмочках.  
Популярность этого форума и количество посетителей с их насущными проблемами, говорят об обратном.
 
Маруся, тема совершенно не об этом.    
Хотите поговорить на тему, поднятую Вами, создайте новую (у нас можно, назовите "OFF:Ваше_название"), где можно будет обсудить такой жизненно важный для тематики данного форума вопрос.  
Здесь флудить прекращаем.
 
{quote}{login=kulkrise}{date=02.09.2012 07:10}{post}Допустим есть числа:  
Строка 1:  2556,24___Строка 2: 2 556,24___Строка 3: 2,556.24...{/post}{/quote}  
Как правило, я сталкиваюсь с подобными числами при импорте из 1С.  
Для приведения их в порядок использую макрос:  
 
Sub Text1C()  
   'Преобразование чисел из 1С в виде #,##0.00 в формат # ##0,00  
   Dim r As Range  
   With Application  
       .DecimalSeparator = "."  
       .ThousandsSeparator = ","  
       .UseSystemSeparators = False  
   End With  
   For Each r In Cells.SpecialCells(xlCellTypeConstants, 2)  
       If r = " " Then r.ClearContents Else r = r.Value  
   Next r  
   Application.UseSystemSeparators = True  
End Sub
 
Мне жутко интересно - а разработчики 1С что нибудь слышали о проблемах их разработки? Ладно бы раз, два. Но мы на форумах постоянно исправляем их явный, от версии к версии косяк. Мне бы уже стыдно стало, как минимум.
Я сам - дурнее всякого примера! ...
 
{quote}{login=MCH}{date=03.09.2012 10:47}{post}Как правило, я сталкиваюсь с подобными числами при импорте из 1С.  
Для приведения их в порядок использую макрос:{/post}{/quote}  
Михаил, у автора темы там сборная солянка разделителей, которая, похоже получена из разных отчетов. Бывает и такое. При этом одним типом разделителей не обойтись, потому что разделитель десятичных разрядов то точка, то запятая.  
А вообще тема с разделителями, по-моему, интересная и полезная.  
Варианты бывают разные и Ваш макрос очень в тему.  
 
Kulkrise, не смущайтесь горячему обсуждению в Вашей теме - любим мы это дело.  
Берите, что из советов подходит, а если возникнут вопросы - спрашивайте.  
Никто из нас не миновал стадии, когда вообще ничего не знаешь ни про формулы, ни про макросы, ни про IT.  
Спасибо, что использовали фото, так приятнее общаться, и за краткую и понятную, как по мне, формулировку вопроса.
 
предположил, что 2556,24 и 2 556,24 - это уже числа, а  2,556.24 - это текст  
Мой макрос проигнорирует числа, а текст переведет в число
 
А-а, может и так  :-)
 
насколько я понял, автор импортирует из сторонней программы в EXCEL чё-то, и в EXCELе появляется ряд цифр. Некоторые из них так сказать правильные, а некоторые неправильные (разделитель разрядов-запятая, разделитель целой и дробной части-точка)  
 
Тогда можно выделить четырехугольный диапазон и выпольнить такой короткий макрос:  
selection.value=selection.value  
правильные цифры остаются правильными, а неправильные превращаются в правильные  
если в выделенном диапазоне есть формулы, они превращаются в значения, но ведь из сторонней программы в EXCEL не импортируется же формула, правильно?  
так что пользователю остаётся правильно выделить диапазон и нажать на кнопку  
 
P.S. А если диапазон может быть не четырехуголmным, то:  
sub ТВОРОГ()  
Select Case Selection.Cells.Count  
Case 1: If Selection.NumberFormat = "@" Then Selection.NumberFormat = "#,##0;-#,##0;#"  
Case Else: On Error Resume Next: Selection.SpecialCells(2, 2).NumberFormat = "#,##0.00;-#,##0.00;#": On Error GoTo 0  
End Select  
Dim x As Range, r As Range: Set r = Intersect(ActiveSheet.UsedRange, Selection)  
If Not r Is Nothing Then For Each x In r.Areas: x.VALUE = x.VALUE: Next  
End Sub
 
{quote}{login=vikttur}{date=02.09.2012 07:24}{thema=}{post}=ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;",";);".";)/100  
Будут ошибки с числами без копеек.{/post}{/quote}  
при этой формуле у меня к сожалению число 2304,20 преобразует в число 230,42 что мне не подходит
 
{quote}{login=KukLP}{date=02.09.2012 07:25}{thema=}{post}Мало, что без примера... kulkrise, а поискать по форуму - "текст в число"?{/post}{/quote}  
 
искала на гугле, прошЕРСТИЛА немало ссылок, но нужного результата мне это не дало, возможно что я не смогла понять как правильно применить данную информацию  
[Исправлено модератором]
 
ZVI, спасибо за макрос попробую на днях его добавить, и да я действительно не могу сказать что я дружу с макросами, но попытаюсь, если будет уж совсем тяжко - напишу
 
kulkrise, Вы это - поаккуратнее с выражениями :-) (сообщение от 07.09.2012, 22:34)
 
я по быренькому набирала, так что извините пожалуйста, хотя и довольно неприятная, но это просто очепятка
 
{quote}{login=МАРУСЯ}{date=03.09.2012 09:19}{thema=}{post}ZVI!  
Автор темы пока молчит.  
Это – по минимуму – некорректно.  
Тем паче, что оказана конкретная помощь.  
{/post}{/quote}  
 
уж извините, но я не сижу круглыми сутками у компутера, а работаю и учусь, и работка у меня с утра по раньше и до победного
Страницы: 1
Читают тему
Наверх