Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2016, 19:14   #1
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию Замена точки на запятую

Доброго времени суток, уважаемые форумчане!
Большая просьба поправить макрос, не могу понять где ошибка.
Суть в том, что, если в столбцах "I:K", знак " . " заменить вручную на " , " (точку на запятую), то в цифрах у которых после "точки" было к примеру шесть знаков, то получается верное значение (ячейка I36 = 786,016309). А если использовать макрос файла, то значение получается целое (ячейка I36 = 786 016 309)

Columns("I:K").Select
Range("I4").Activate
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Вложения
Тип файла: xls Учет 12-2015.xls (76.5 Кб, 21 просмотров)
amadeus017 вне форума Ответить с цитированием
Старый 11.01.2016, 19:26   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а так:
Код:
sub ReplDot2Comma
  dim a
  a = [i4:k999].value
  [i4:k999].value = a
end sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 11.01.2016 в 19:32.
IgorGO вне форума Ответить с цитированием
Старый 11.01.2016, 19:42   #3
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

IgorGO
Большое спасибо!
Заменил свою часть макроса, которую писал мастером на Ваш код, все работает...
Еще раз, большое спасибо!
amadeus017 вне форума Ответить с цитированием
Старый 12.01.2016, 00:10   #4
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

доброго времени суток,попробуйте делать замену еще таким макросом
кнопка yyy

Код:
Sub yyy()
  Dim z, t$
  z = Range("I5:K" & Range("I" & Rows.Count).End(xlUp).Row).Value
    With CreateObject("VBScript.RegExp"): .Pattern = "\."
    For i = 1 To UBound(z)
     For j = 1 To UBound(z, 2): t = z(i, j)
    If .test(t) Then t = .Replace(t, ",")
    Next j, i
    End With
    Range("I5").Resize(UBound(z), UBound(z, 2)).Value = z
End Sub
Вложения
Тип файла: rar Учет 12-2015 (2)_progr.rar (24.8 Кб, 8 просмотров)
svsh2016 вне форума Ответить с цитированием
Старый 12.01.2016, 01:31   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

отличный макрос, есть только 3 замечания:
1. очевидно, что он более громоздкий
2. он существенно медленнее (предположу, что очень существенно)
3. упростите Ваш макрос вот до такой записи и все будет точно так же работать
Код:
Sub yyy()
  Dim z, t$
  z = Range("I5:K" & Range("I" & Rows.Count).End(xlUp).Row).Value
  Range("I5").Resize(UBound(z), UBound(z, 2)).Value = z
End Sub
потому что то, что Вы в переменной t заменили точки на запятые - это очень хорошо, но грустно, что потом никуда эту t не вернули, а преобразование типов данных произошло на том же принципе, который предложил я))

когда в Екселе разделитель целой и дробной части запятая то запись 5.45 в ячейке - это для Ексель "5.45",
но, когда это 5.45 попадает в массив с необьявленным типом данных (читай с типом Variant) вот тут-то VBA точно видит "так это же пять целых сорок пять сотых!" и потом при возврате массива на лист Ексель добросовестно вместо точки ставит свой разделитель (запятую)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 12.01.2016 в 02:03.
IgorGO вне форума Ответить с цитированием
Старый 12.01.2016, 04:25   #6
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Еще раз спасибо за то, что не оставили тему без внимания! Варианты очень интересные и обязательно применю их в работу.
amadeus017 вне форума Ответить с цитированием
Старый 12.01.2016, 09:39   #7
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

добрый день,добавлю,макрос в #2 замечательный,но имеется недостаток-это использование квадратных скобок,что замедляет скорость выполнения кода на 70%,посмотрите с.323 Джон Уокенбах,2014,"Microsoft Excel2013
Профессиональное программирование на VBA".
svsh2016 вне форума Ответить с цитированием
Старый 12.01.2016, 10:21   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

спасибо! теперь буду знать
и заодно будем считать, что я теперь знаком с книгой "Microsoft Excel2013 Профессиональное программирование на VBA", ну... не со всей книгой, а с фрагментом с 383 страницы - точно!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 12.01.2016, 11:23   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Хорошо что не замедляет выполнение всего кода... Или всего? Напугали...
Вообще я тоже читал что быстрее работает Range("x"), но быстрее писать [] (выполняется Evaluate). Да и фиг с ним
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет ввода в TextBox букв и . (точки) / Или автозамена точки на запятую uralshans Microsoft Office Excel 4 30.08.2013 00:24
даны две точки. организовать движение из точки А в точку Б окружности! Wi1D Помощь студентам 6 23.05.2009 19:55
замена многоточий на точки(ассемблер) Shnaps151 Помощь студентам 1 20.05.2009 12:47
Замена точки на запятую SIV84 Microsoft Office Excel 1 11.01.2009 11:16
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть Дикий Помощь студентам 7 12.05.2008 17:57