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

Вход

Регистрация

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

 

= Мир MS Excel/Перенос регулярки из Word в Excel - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перенос регулярки из Word в Excel (Макросы/Sub)
Перенос регулярки из Word в Excel
bivilbi Дата: Воскресенье, 16.11.2014, 10:30 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Есть исходный текст
ВасяПупкин
ИванИванов

В ворде достаточно применить в поиске регулярку (<*[а-я][А-Я]*>) что-бы найти такие строки.
А вопрос вот в чем
1. Как в эксель это перенести (ну ну копировать же туда-сюда), т.к. исходная таблица все равно в экселе
2. Как сделать вставку пробела
Вася Пупкин
Иван Иванов

Спасибо!
В аттаче файл-пример
К сообщению приложен файл: 5712398.xlsx (8.3 Kb)


Сообщение отредактировал bivilbi - Воскресенье, 16.11.2014, 11:32
 
Ответить
СообщениеДобрый день.
Есть исходный текст
ВасяПупкин
ИванИванов

В ворде достаточно применить в поиске регулярку (<*[а-я][А-Я]*>) что-бы найти такие строки.
А вопрос вот в чем
1. Как в эксель это перенести (ну ну копировать же туда-сюда), т.к. исходная таблица все равно в экселе
2. Как сделать вставку пробела
Вася Пупкин
Иван Иванов

Спасибо!
В аттаче файл-пример

Автор - bivilbi
Дата добавления - 16.11.2014 в 10:30
doober Дата: Воскресенье, 16.11.2014, 11:46 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Так надо?
К сообщению приложен файл: 5712398.xlsm (15.5 Kb)


 
Ответить
СообщениеТак надо?

Автор - doober
Дата добавления - 16.11.2014 в 11:46
bivilbi Дата: Воскресенье, 16.11.2014, 14:33 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
doober, Ага!!
Спасибо громадное!
 
Ответить
Сообщениеdoober, Ага!!
Спасибо громадное!

Автор - bivilbi
Дата добавления - 16.11.2014 в 14:33
krosav4ig Дата: Воскресенье, 16.11.2014, 19:24 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
можно еще и так
[vba]
Код
Public Function ФИО$(S)
Dim Sout As String
Sout = S
     Set RegExp = CreateObject("VBScript.RegExp")
     RegExp.Global = True
     RegExp.Pattern = "([\s\S]*)([а-я])([А-Я])([\s\S]*)"
     Do
         If RegExp.test(Sout) Then
             Sout = RegExp.Replace(Sout, "$1$2 $3$4")
         End If
     Loop While RegExp.test(Sout)
    ФИО = Trim(Sout)
End Function
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеможно еще и так
[vba]
Код
Public Function ФИО$(S)
Dim Sout As String
Sout = S
     Set RegExp = CreateObject("VBScript.RegExp")
     RegExp.Global = True
     RegExp.Pattern = "([\s\S]*)([а-я])([А-Я])([\s\S]*)"
     Do
         If RegExp.test(Sout) Then
             Sout = RegExp.Replace(Sout, "$1$2 $3$4")
         End If
     Loop While RegExp.test(Sout)
    ФИО = Trim(Sout)
End Function
[/vba]

Автор - krosav4ig
Дата добавления - 16.11.2014 в 19:24
RAN Дата: Воскресенье, 16.11.2014, 19:28 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
krosav4ig, а с этого места поподробнее плз
Replace(Sout, "$1$2 $3$4")


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщениеkrosav4ig, а с этого места поподробнее плз
Replace(Sout, "$1$2 $3$4")

Автор - RAN
Дата добавления - 16.11.2014 в 19:28
krosav4ig Дата: Воскресенье, 16.11.2014, 19:34 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
RAN, $1 - то что нашлось в первых скобках, $2 -во вторых, и т.д.
точно так же как и в word в замене с подстановочными знаками (\1 , \2)
вот к примеру эта функция возвращает из строки фамилию с инициалами
[vba]
Код
Function getFIO$(str$)
     Dim S$: S = Trim(str)
     With CreateObject("VBScript.RegExp")
         .IgnoreCase = False
         .Global = True
         .Pattern = "([.-]) +"
         Do
             If .Test(S) Then S = .Replace(S, "$1")
         Loop While .Test(S)
         .Pattern = "[\s\S]*?([А-Яа-яЁё]+ [А-ЯЁ.-]{4,7})[\s\S]*"
         If .Test(S) Then getFIO = .Replace(S, "$1")
     End With
End Function
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Воскресенье, 16.11.2014, 21:37
 
Ответить
СообщениеRAN, $1 - то что нашлось в первых скобках, $2 -во вторых, и т.д.
точно так же как и в word в замене с подстановочными знаками (\1 , \2)
вот к примеру эта функция возвращает из строки фамилию с инициалами
[vba]
Код
Function getFIO$(str$)
     Dim S$: S = Trim(str)
     With CreateObject("VBScript.RegExp")
         .IgnoreCase = False
         .Global = True
         .Pattern = "([.-]) +"
         Do
             If .Test(S) Then S = .Replace(S, "$1")
         Loop While .Test(S)
         .Pattern = "[\s\S]*?([А-Яа-яЁё]+ [А-ЯЁ.-]{4,7})[\s\S]*"
         If .Test(S) Then getFIO = .Replace(S, "$1")
     End With
End Function
[/vba]

Автор - krosav4ig
Дата добавления - 16.11.2014 в 19:34
ikki Дата: Понедельник, 17.11.2014, 03:16 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
krosav4ig, а с этого места поподробнее плз

([\s\S]*)
что это? :)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
krosav4ig, а с этого места поподробнее плз

([\s\S]*)
что это? :)

Автор - ikki
Дата добавления - 17.11.2014 в 03:16
krosav4ig Дата: Понедельник, 17.11.2014, 10:20 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
ikki, \s - Пробельный символ (space, tab, vblf и т.п.). Эквивалентно выражению "[ \r\t\n\f]"
\S - Непробельный символ. Эквивалентно выражению "[^ \r\t\n\f]"
* Определяет ни одного или несколько символов, стоящих перед ним.
получаеццо что [\s\S]* означает любое количество любых символов


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеikki, \s - Пробельный символ (space, tab, vblf и т.п.). Эквивалентно выражению "[ \r\t\n\f]"
\S - Непробельный символ. Эквивалентно выражению "[^ \r\t\n\f]"
* Определяет ни одного или несколько символов, стоящих перед ним.
получаеццо что [\s\S]* означает любое количество любых символов

Автор - krosav4ig
Дата добавления - 17.11.2014 в 10:20
ikki Дата: Понедельник, 17.11.2014, 12:03 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
это-то я понимаю.
я другого не пойму: чем это отличается от .* ?
зачем писать 6 символов там, где можно написать один?


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Понедельник, 17.11.2014, 12:06
 
Ответить
Сообщениеэто-то я понимаю.
я другого не пойму: чем это отличается от .* ?
зачем писать 6 символов там, где можно написать один?

Автор - ikki
Дата добавления - 17.11.2014 в 12:03
krosav4ig Дата: Понедельник, 17.11.2014, 15:02 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
ikki, а вдруг в тексте будет \n ? ^_^


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеikki, а вдруг в тексте будет \n ? ^_^

Автор - krosav4ig
Дата добавления - 17.11.2014 в 15:02
ikki Дата: Понедельник, 17.11.2014, 17:20 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
ага, понятно.

достаточный код (всё остальное ненужно и вредно - строгое имхо) для данной задачи
[vba]
Код
Function f$(s$)
      Static r As Object
      If r Is Nothing Then Set r = CreateObject("vbscript.regexp"): r.Global = 1: r.IgnoreCase = 0: r.Pattern = "([а-яё])([А-ЯЁ])"
      f = r.replace(s, "$1 $2")
End Function
[/vba]

krosav4ig, возьмите на заметку - Replace работает со всеми матчами за раз.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Понедельник, 17.11.2014, 17:23
 
Ответить
Сообщениеага, понятно.

достаточный код (всё остальное ненужно и вредно - строгое имхо) для данной задачи
[vba]
Код
Function f$(s$)
      Static r As Object
      If r Is Nothing Then Set r = CreateObject("vbscript.regexp"): r.Global = 1: r.IgnoreCase = 0: r.Pattern = "([а-яё])([А-ЯЁ])"
      f = r.replace(s, "$1 $2")
End Function
[/vba]

krosav4ig, возьмите на заметку - Replace работает со всеми матчами за раз.

Автор - ikki
Дата добавления - 17.11.2014 в 17:20
krosav4ig Дата: Понедельник, 17.11.2014, 22:32 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
r.Pattern = "([а-яё])([А-ЯЁ])"

пол-дня порывался переписать свою писульку в этом духе, но никак руки не доходили
возьмите на заметку
взял, зарубил себе на всех местах, постоянно об этом забываю :(


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщение
r.Pattern = "([а-яё])([А-ЯЁ])"

пол-дня порывался переписать свою писульку в этом духе, но никак руки не доходили
возьмите на заметку
взял, зарубил себе на всех местах, постоянно об этом забываю :(

Автор - krosav4ig
Дата добавления - 17.11.2014 в 22:32
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перенос регулярки из Word в Excel (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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