Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Регулярные выражения - замена - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Регулярные выражения - замена (Макросы/Sub)
Регулярные выражения - замена
fairylive Дата: Вторник, 18.10.2016, 23:00 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Всем привет. Хотел немного усовершенствовать макрос и так ничего у меня и не получилось с регулярными выражениями. Есть полно примеров с функциями которым скармливается оригинал (одна ячейка), паттерн и замена. Но как работать со всеми ячейками в экселе? Есть Cells.Replace но как можно в нём задать регулярные выражения?
Короче сейчас у меня какой-то такой код, за неимением лучшего:
[vba]
Код
    Cells.Replace What:=".0000", Replacement:="", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    Cells.Replace What:=".000", Replacement:="", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    Cells.Replace What:=".00", Replacement:="", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    Cells.Replace What:=".0", Replacement:="", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
[/vba]

PS Это заплатка на лечение чисел в текстовом виде при экспорте из автокада. Когда из автокада извлекаются данные (через инструмент Извлечение данных), то все данные во-первых пишутся с апострофом перед ними, во-вторых числа задаются через точку. С апострофами борюсь очисткой форматов. А с точкой приходится как-то так (см.код). При этом надо бы сразу продумать что в автокаде на разных машинах могут быть форматы чисел с округлением до десятичных сотых и так далее.
PPS То что можно заменить в настройках экселя разделитель на точку я знаю. Может это и был бы самый простой способ, а я всё усложняю? Я просто к запятой привык. Удобнее её с цифровой клавиатуры набирать.


Сообщение отредактировал fairylive - Вторник, 18.10.2016, 23:31
 
Ответить
СообщениеВсем привет. Хотел немного усовершенствовать макрос и так ничего у меня и не получилось с регулярными выражениями. Есть полно примеров с функциями которым скармливается оригинал (одна ячейка), паттерн и замена. Но как работать со всеми ячейками в экселе? Есть Cells.Replace но как можно в нём задать регулярные выражения?
Короче сейчас у меня какой-то такой код, за неимением лучшего:
[vba]
Код
    Cells.Replace What:=".0000", Replacement:="", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    Cells.Replace What:=".000", Replacement:="", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    Cells.Replace What:=".00", Replacement:="", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    Cells.Replace What:=".0", Replacement:="", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
[/vba]

PS Это заплатка на лечение чисел в текстовом виде при экспорте из автокада. Когда из автокада извлекаются данные (через инструмент Извлечение данных), то все данные во-первых пишутся с апострофом перед ними, во-вторых числа задаются через точку. С апострофами борюсь очисткой форматов. А с точкой приходится как-то так (см.код). При этом надо бы сразу продумать что в автокаде на разных машинах могут быть форматы чисел с округлением до десятичных сотых и так далее.
PPS То что можно заменить в настройках экселя разделитель на точку я знаю. Может это и был бы самый простой способ, а я всё усложняю? Я просто к запятой привык. Удобнее её с цифровой клавиатуры набирать.

Автор - fairylive
Дата добавления - 18.10.2016 в 23:00
buchlotnik Дата: Вторник, 18.10.2016, 23:08 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2049
Репутация: 613 ±
Замечаний: 0% ±

2010, 2013, 2016 RUS / ENG
дык а [vba]
Код
Cells.Replace What:=".", Replacement:=","
[/vba] чем не покатило?


платная помощь:
ЯД: 410012595572239; WM: 311017577133
buchlotnik@mail.ru


Сообщение отредактировал buchlotnik - Вторник, 18.10.2016, 23:08
 
Ответить
Сообщениедык а [vba]
Код
Cells.Replace What:=".", Replacement:=","
[/vba] чем не покатило?

Автор - buchlotnik
Дата добавления - 18.10.2016 в 23:08
fairylive Дата: Вторник, 18.10.2016, 23:16 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
чем не покатило?

Так нули остаются, после запятой. А эксель при этом этом проставляет в таких ячейках зелёный треугольничек и говорит что число сохранено как текст или перед ним стоит апостроф. Апостроф убирается так
[vba]
Код
cells.clearformats
[/vba]
К сообщению приложен файл: 3617287.png(173Kb)


Сообщение отредактировал fairylive - Вторник, 18.10.2016, 23:20
 
Ответить
Сообщение
чем не покатило?

Так нули остаются, после запятой. А эксель при этом этом проставляет в таких ячейках зелёный треугольничек и говорит что число сохранено как текст или перед ним стоит апостроф. Апостроф убирается так
[vba]
Код
cells.clearformats
[/vba]

Автор - fairylive
Дата добавления - 18.10.2016 в 23:16
buchlotnik Дата: Вторник, 18.10.2016, 23:23 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2049
Репутация: 613 ±
Замечаний: 0% ±

2010, 2013, 2016 RUS / ENG
Цитата
Может это и был бы самый простой способ
т.е. вы хотите при заданном десятичном разделите точка, чтобы Excel воспринимал запятую как десятичный разделитель точка? %) %) %)
Цитата
самый простой способ
это проставлять разделитель по умолчанию, чтобы числа были числами


платная помощь:
ЯД: 410012595572239; WM: 311017577133
buchlotnik@mail.ru


Сообщение отредактировал buchlotnik - Вторник, 18.10.2016, 23:25
 
Ответить
Сообщение
Цитата
Может это и был бы самый простой способ
т.е. вы хотите при заданном десятичном разделите точка, чтобы Excel воспринимал запятую как десятичный разделитель точка? %) %) %)
Цитата
самый простой способ
это проставлять разделитель по умолчанию, чтобы числа были числами

Автор - buchlotnik
Дата добавления - 18.10.2016 в 23:23
fairylive Дата: Вторник, 18.10.2016, 23:30 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

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

Разделитель целой и дробной части (Панель управления - язык и региональные стандарты) - запятая. В Экселе разделитель тоже запятая. Мне так удобно. Так хорошо. Но автокаду на это плевать. У него разделитель только точка. И выгружает в эксель он точку. Я хочу как-то с этим бороться с помощью VBA.
 
Ответить
Сообщение
т.е. вы хотите при заданном десятичном разделите точка, чтобы Excel воспринимал запятую как десятичный разделитель точка?

Разделитель целой и дробной части (Панель управления - язык и региональные стандарты) - запятая. В Экселе разделитель тоже запятая. Мне так удобно. Так хорошо. Но автокаду на это плевать. У него разделитель только точка. И выгружает в эксель он точку. Я хочу как-то с этим бороться с помощью VBA.

Автор - fairylive
Дата добавления - 18.10.2016 в 23:30
Karataev Дата: Вторник, 18.10.2016, 23:32 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 641
Репутация: 226 ±
Замечаний: 0% ±

Excel
У метода "Replace" только два подстановочных символа: * и ? Поэтому каких-то регулярных выражений нельзя особо много сделать.
Попробуйте такой вариант:
[vba]
Код
Sub Заменить_точки()
    
    Dim lr As Long
    
    lr = Columns("A").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    Range("A1:A" & lr).Value = Range("A1:A" & lr).Value
    
End Sub
[/vba]
Прикладываю файл, на котором этот код работает.
К сообщению приложен файл: 2582569.xlsx(8Kb)


 
Ответить
СообщениеУ метода "Replace" только два подстановочных символа: * и ? Поэтому каких-то регулярных выражений нельзя особо много сделать.
Попробуйте такой вариант:
[vba]
Код
Sub Заменить_точки()
    
    Dim lr As Long
    
    lr = Columns("A").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    Range("A1:A" & lr).Value = Range("A1:A" & lr).Value
    
End Sub
[/vba]
Прикладываю файл, на котором этот код работает.

Автор - Karataev
Дата добавления - 18.10.2016 в 23:32
buchlotnik Дата: Вторник, 18.10.2016, 23:37 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 2049
Репутация: 613 ±
Замечаний: 0% ±

2010, 2013, 2016 RUS / ENG
Цитата
Я хочу как-то с этим бороться с помощью VBA.
от Вас я не увидел ничего кроме png на котором всё равно не разобрать - у меня разделитель запятая и преобразование РАБОТАЕТ - может пора правила форума почитать?, а не жаловаться на AutoCAD - почему-то я знаю как это правильно пишется, хотя ни разу в жизни не запускал


платная помощь:
ЯД: 410012595572239; WM: 311017577133
buchlotnik@mail.ru
 
Ответить
Сообщение
Цитата
Я хочу как-то с этим бороться с помощью VBA.
от Вас я не увидел ничего кроме png на котором всё равно не разобрать - у меня разделитель запятая и преобразование РАБОТАЕТ - может пора правила форума почитать?, а не жаловаться на AutoCAD - почему-то я знаю как это правильно пишется, хотя ни разу в жизни не запускал

Автор - buchlotnik
Дата добавления - 18.10.2016 в 23:37
fairylive Дата: Вторник, 18.10.2016, 23:49 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Karataev, то есть по сути весь код это присвоить значениям диапазона значения этого же диапазона? Тут какая-то магия? Я попробую прикрутить эту штуку чтобы посмотреть как она работает. У меня просто значения могут быть в разных столбцах и рядах (см. картинку сверху).
buchlotnik, а что вы хотели увидеть? Файл? Пожалуйста. На картинке показать хотел ошибку и предложения от Excel по поводу её решения. Вручную можно щёлкнуть - преобразовать в число. Проблема решится. Как это же сделать на VBA?
К сообщению приложен файл: __-10.xls(12Kb)
 
Ответить
СообщениеKarataev, то есть по сути весь код это присвоить значениям диапазона значения этого же диапазона? Тут какая-то магия? Я попробую прикрутить эту штуку чтобы посмотреть как она работает. У меня просто значения могут быть в разных столбцах и рядах (см. картинку сверху).
buchlotnik, а что вы хотели увидеть? Файл? Пожалуйста. На картинке показать хотел ошибку и предложения от Excel по поводу её решения. Вручную можно щёлкнуть - преобразовать в число. Проблема решится. Как это же сделать на VBA?

Автор - fairylive
Дата добавления - 18.10.2016 в 23:49
fairylive Дата: Вторник, 18.10.2016, 23:52 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
у меня разделитель запятая и преобразование РАБОТАЕТ

Что именно у вас работает? Ваш предложеный код?
 
Ответить
Сообщение
у меня разделитель запятая и преобразование РАБОТАЕТ

Что именно у вас работает? Ваш предложеный код?

Автор - fairylive
Дата добавления - 18.10.2016 в 23:52
Karataev Дата: Вторник, 18.10.2016, 23:58 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 641
Репутация: 226 ±
Замечаний: 0% ±

Excel
то есть по сути весь код это присвоить значениям диапазона значения этого же диапазона?

Да, в этом суть. Смысл может быть в том, что если в ячейку записывать дробное число с точкой, то такое число воспринимается Excel'ем, как число, а не как текст, даже если у дробного числа тип данных "String" (Текст).


 
Ответить
Сообщение
то есть по сути весь код это присвоить значениям диапазона значения этого же диапазона?

Да, в этом суть. Смысл может быть в том, что если в ячейку записывать дробное число с точкой, то такое число воспринимается Excel'ем, как число, а не как текст, даже если у дробного числа тип данных "String" (Текст).

Автор - Karataev
Дата добавления - 18.10.2016 в 23:58
fairylive Дата: Среда, 19.10.2016, 00:26 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Да, в этом суть.


Допилил так. Правда заработало с 10-й попытки. Фокус в том что надо это проделать с исходным файлом извлечения СРАЗУ. А я сначала двигал столбцы и применял сортировки разные. И после этого почем-то уже не прокатывало. Метод странный но короткий))) И почему-то работает. :D
[vba]
Код
Cells(1, 1).CurrentRegion.Value = Cells(1, 1).CurrentRegion.Value
[/vba]
 
Ответить
Сообщение
Да, в этом суть.


Допилил так. Правда заработало с 10-й попытки. Фокус в том что надо это проделать с исходным файлом извлечения СРАЗУ. А я сначала двигал столбцы и применял сортировки разные. И после этого почем-то уже не прокатывало. Метод странный но короткий))) И почему-то работает. :D
[vba]
Код
Cells(1, 1).CurrentRegion.Value = Cells(1, 1).CurrentRegion.Value
[/vba]

Автор - fairylive
Дата добавления - 19.10.2016 в 00:26
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Регулярные выражения - замена (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!