Страницы: 1
RSS
Макрос - из текстового формата в числовой - ошибка
 
Есть макрос, который преобразовывает из текстового формата в числовой  
 
Sub Отчисловать() 'Этот макрос превращает числа, отформатированные как текст, в числа  
   STime = Timer  
   Selection.NumberFormat = "#,##0"  
   Dim x As Variant  
   x = ActiveWindow.RangeSelection  
   ActiveWindow.RangeSelection = x  
End Sub  
 
Если выделить несколько ячеек и применить макрос, то преобразовывает корректно (в примере желтым цветом)  
Если одну ячейку - то "не видит" запятую. В файле красная ячейка - было 209,745. Должно было быть после преобразования 209,745. Но оказалось 209 745.  
В чем загвоздка? помогите ))
 
попробуйте задать формат в макросе  
"#.##0"
 
По моему, замена запятой на точку в формате не поможет. Могу предложить такой вариант:  
Sub Отчисловать() 'Этот макрос превращает числа, отформатированные как текст, в числа  
   STime = Timer  
     
   For Each c In Selection.Cells  
       c.Value = Replace(c, ",", ".")  
       c.NumberFormat = "#,##0"  
   Next c  
 
   Dim x As Variant  
   x = ActiveWindow.RangeSelection  
   ActiveWindow.RangeSelection = x  
End Sub
 
Sub Test()  
 With Selection  
   .Replace ",", ""  
   .Value = .Value  
   .NumberFormat = "#\,##0"  
 End With  
End Sub
 
{quote}{login=ZVI}{date=21.10.2010 12:56}{thema=}{post}Sub Test()  
 With Selection  
   .Replace ",", ""  
   .Value = .Value  
   .NumberFormat = "#\,##0"  
 End With  
End Sub{/post}{/quote}  
Уточню, что это для использования запятой в качестве разделителя тысяч.
 
На всякий случай: для этого метода  
.Value = .Value  
 
Selection должен быть прямоугольной областью. Иначе информация будет искажена.
 
{quote}{login=ZVI}{date=21.10.2010 01:00}{thema=}{post}{quote}{login=ZVI}{date=21.10.2010 12:56}{thema=}{post}Sub Test()  
 With Selection  
   .Replace ",", ""  
   .Value = .Value  
   .NumberFormat = "#\,##0"  
 End With  
End Sub{/post}{/quote}  
Уточню, что это для использования запятой в качестве разделителя тысяч.{/post}{/quote}  
 
да, это точно  
для 1226,99999999994 - уже не работает (
 
{quote}{login=webley}{date=21.10.2010 12:12}{thema=}{post}По моему, замена запятой на точку в формате не поможет. Могу предложить такой вариант:  
Sub Отчисловать() 'Этот макрос превращает числа, отформатированные как текст, в числа  
   STime = Timer  
     
   For Each c In Selection.Cells  
       c.Value = Replace(c, ",", ".")  
       c.NumberFormat = "#,##0"  
   Next c  
 
   Dim x As Variant  
   x = ActiveWindow.RangeSelection  
   ActiveWindow.RangeSelection = x  
End Sub{/post}{/quote}  
 
Этот работает (только долго)  
Спасибо
 
{quote}{login=}{date=21.10.2010 01:19}{thema=Re: }{post}для 1226,99999999994 - уже не работает ({/post}{/quote}  
Что значит не работает? У меня так:  
До (текст): 1226,99999999994  
После (число):  122699999999,994  
То есть, все в соответствии с заданным форматом  
 
Возможно, Вам нужен такой формат:  
.NumberFormat = "###\,###\,###\,###\,##0"
 
Кстати, если воспользоваться методом, который предложил ZVI, то работает гораздо быстрее:  
Sub Test()  
   With Selection  
       .Replace ",", "."  
       .NumberFormat = "#,##0"  
   End With  
End Sub  
 
To ZVI:  
насколько я понял, запятая - это разделитель целой и дробной части. И попутно вопрос - а для чего в данном случае служет строка ".Value = .Value"?
 
.Value = .Value преобразует текстовые значения в числовые, если в текстовых значениях нет запятых
 
{quote}{login=ZVI}{date=21.10.2010 02:15}{thema=}{post}.Value = .Value преобразует текстовые значения в числовые, если в текстовых значениях нет запятых{/post}{/quote}  
 
Понял, спасибо
 
У меня появилась проблема, есть файл, где числа в текстовом формате, если использовать макрос    
 
Sub Test()  
With Selection  
.Replace ",", "."  
.NumberFormat = "#,##0.00"  
End With  
End Sub  
 
То в числовой формат переведутся только те числа, которые с дробной частью, а числа вроде "14; 65; 89" так и останутся в текстовом. Помогите вылечить и их :)
 
Извиняюсь, что не приложил пример файла
 
Скопируйте пустую ячейку, выделите диапазон - спецвставка - сложить.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=05.10.2011 12:27}{thema=}{post}Скопируйте пустую ячейку, выделите диапазон - спецвставка - сложить.{/post}{/quote}  
 
У меня исходный файл на 15 000 строк + в него в произвольном порядке добавляются числа в таком формате, поэтому я выделяю весь диапазон с числами B:K и перевожу в числовой вид. В экселе есть функция с автоматическим преобразованием, но выделять постоянно столбцы для этого очень долго и крайне неудобно. Хотелось бы воспользоваться макросом для этих целей.
 
Попробуйте:  
Sub Test()  
   Dim i&  
   On Error Resume Next  
   With Me.UsedRange  
       .Replace ",", Mid(1 / 2, 2, 1)  
       For i = 1 To .Columns.Count  
           Intersect(Me.UsedRange, Columns(i)).TextToColumns  
       Next  
       .NumberFormat = "# ##0.00"  
   End With  
End Sub
Я сам - дурнее всякого примера! ...
 
Попробуйте  
 
Sub Test()  
With Selection  
   .NumberFormat = "#,##0.00"  
   .FormulaLocal = .FormulaLocal  
End With  
End Sub
 
Спасибо большое, все получилось!
Страницы: 1
Читают тему
Наверх