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

Вход

Регистрация

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

 

= Мир MS Excel/Регулярные выражения с частичной заменой шаблона - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Регулярные выражения с частичной заменой шаблона
EvaNa Дата: Четверг, 21.01.2021, 16:20 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Добрый день, уважаемые форумчане. Прошу вашей помощи с макросом. У меня задача убрать пробел в нумерации домов, т.е. между "д." и самим номером дома не должно остаться пробела. Загвоздка состоит в том, что в адресе может присутствовать деревня, которая сокращенно выглядит также, так вот после не пробел должен остаться. Я составила макрос, который может выбрать только д., за которой идет любая цифра. Но вот споткнулась на замене. Он меняет все, что входит в .pattern. Вопрос: можно ли заменить лишь часть того, что прописано в шаблоне?
К сообщению приложен файл: ____.xlsm (21.0 Kb)
 
Ответить
СообщениеДобрый день, уважаемые форумчане. Прошу вашей помощи с макросом. У меня задача убрать пробел в нумерации домов, т.е. между "д." и самим номером дома не должно остаться пробела. Загвоздка состоит в том, что в адресе может присутствовать деревня, которая сокращенно выглядит также, так вот после не пробел должен остаться. Я составила макрос, который может выбрать только д., за которой идет любая цифра. Но вот споткнулась на замене. Он меняет все, что входит в .pattern. Вопрос: можно ли заменить лишь часть того, что прописано в шаблоне?

Автор - EvaNa
Дата добавления - 21.01.2021 в 16:20
RAN Дата: Четверг, 21.01.2021, 17:09 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub замена_д_вар1()
    Dim r As Range
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "(д\.) (\d)"
        On Error Resume Next
        A = Cells(Rows.Count, "N").End(xlUp).Row
        For Each r In Range("N2:N" & A)
            If .Test(r.Value) Then
                r.Next.Value = .Replace(r.Value, "$1$2")
            End If
        Next
    End With
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Sub замена_д_вар1()
    Dim r As Range
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "(д\.) (\d)"
        On Error Resume Next
        A = Cells(Rows.Count, "N").End(xlUp).Row
        For Each r In Range("N2:N" & A)
            If .Test(r.Value) Then
                r.Next.Value = .Replace(r.Value, "$1$2")
            End If
        Next
    End With
End Sub
[/vba]

Автор - RAN
Дата добавления - 21.01.2021 в 17:09
Kuzmich Дата: Четверг, 21.01.2021, 17:26 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
RAN
а что такое r.Next.Value?
 
Ответить
СообщениеRAN
а что такое r.Next.Value?

Автор - Kuzmich
Дата добавления - 21.01.2021 в 17:26
EvaNa Дата: Четверг, 21.01.2021, 17:41 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
RAN, Спасибо. Макрос вставляет результаты в соседний столбец. А можно ли получить замену в той же ячейке? Я попробовала убрать next из r.Next.Value, но в таком случае ничего от исходного не меняется. Не могу понять почему.


Сообщение отредактировал EvaNa - Четверг, 21.01.2021, 17:41
 
Ответить
СообщениеRAN, Спасибо. Макрос вставляет результаты в соседний столбец. А можно ли получить замену в той же ячейке? Я попробовала убрать next из r.Next.Value, но в таком случае ничего от исходного не меняется. Не могу понять почему.

Автор - EvaNa
Дата добавления - 21.01.2021 в 17:41
RAN Дата: Четверг, 21.01.2021, 18:18 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
И я не могу понять, почему. У меня меняется.
Но лучше так
[vba]
Код
Sub замена_д_вар1()
    Dim r As Range
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "(д\.) +?(\d)"
        On Error Resume Next
        A = Cells(Rows.Count, "N").End(xlUp).Row
        For Each r In Range("N2:N" & A)
            If .Test(r.Value) Then
                r.Value = .Replace(r.Value, "$1$2")
            End If
        Next
    End With
End Sub
[/vba]
Тогда и несколько пробелов возьмет


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеИ я не могу понять, почему. У меня меняется.
Но лучше так
[vba]
Код
Sub замена_д_вар1()
    Dim r As Range
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "(д\.) +?(\d)"
        On Error Resume Next
        A = Cells(Rows.Count, "N").End(xlUp).Row
        For Each r In Range("N2:N" & A)
            If .Test(r.Value) Then
                r.Value = .Replace(r.Value, "$1$2")
            End If
        Next
    End With
End Sub
[/vba]
Тогда и несколько пробелов возьмет

Автор - RAN
Дата добавления - 21.01.2021 в 18:18
EvaNa Дата: Пятница, 22.01.2021, 10:03 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
RAN, огромное спасибо за решение! Все отлично работает. Если не затруднит еще маленькую просьбу выполнить, где почитать об этом "$1$2", не понимаю пока как это работает. Заранее благодарю
 
Ответить
СообщениеRAN, огромное спасибо за решение! Все отлично работает. Если не затруднит еще маленькую просьбу выполнить, где почитать об этом "$1$2", не понимаю пока как это работает. Заранее благодарю

Автор - EvaNa
Дата добавления - 22.01.2021 в 10:03
anvg Дата: Пятница, 22.01.2021, 10:31 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток
где почитать об этом "$1$2"

Начните тут
 
Ответить
СообщениеДоброе время суток
где почитать об этом "$1$2"

Начните тут

Автор - anvg
Дата добавления - 22.01.2021 в 10:31
EvaNa Дата: Пятница, 22.01.2021, 11:05 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
anvg, Спасибо
 
Ответить
Сообщениеanvg, Спасибо

Автор - EvaNa
Дата добавления - 22.01.2021 в 11:05
RAN Дата: Пятница, 22.01.2021, 14:10 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Тёзка, привет.
А там этого нет. По крайней мере я не нашел. Равно как и описания коллекций Matches, SubMatches и их свойств.
А то, что "$1" = Matches(0).SubMatches(0), выяснил только изучением кодов с RegExp.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеТёзка, привет.
А там этого нет. По крайней мере я не нашел. Равно как и описания коллекций Matches, SubMatches и их свойств.
А то, что "$1" = Matches(0).SubMatches(0), выяснил только изучением кодов с RegExp.

Автор - RAN
Дата добавления - 22.01.2021 в 14:10
EvaNa Дата: Пятница, 22.01.2021, 14:45 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
RAN, спасибо за разъяснения. Теперь поняла $1 и $2 и есть найденные подвыражения в круглых скобках
 
Ответить
СообщениеRAN, спасибо за разъяснения. Теперь поняла $1 и $2 и есть найденные подвыражения в круглых скобках

Автор - EvaNa
Дата добавления - 22.01.2021 в 14:45
  • Страница 1 из 1
  • 1
Поиск:

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