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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2018, 05:14   #11
Alexey200999
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Alexey200999, приложите ФАЙЛ, где номера в перемешку с текстом.
Потому что если номера телефонов это единственные цифры в тексте - это одно, а если есть еще какие-то числа (номера домов, номера счетов) - это совсем другое.
в тексте только номера телефонов, других цифр нет, последний вариант телефона с пробелами можно не учитывать, встречается редко.
Alexey200999 вне форума Ответить с цитированием
Старый 23.08.2018, 10:38   #12
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

вариант пользовательской функции в столбце G для #11 и еще вариант для #1 функция bbb

Код:
 Function aaa$(t$)
  t = Replace(Replace(Replace(t, "(", ""), "-", ""), ")", "")
With CreateObject("VBScript.RegExp"): .Pattern = "^(?:\+7|9|7)": aaa = .Replace(t, "8")
End With
End Function
Код:
Function bbb$(t$)
  With CreateObject("vbscript.regexp"):   .Global = True: .Pattern = "(\d{11}|\d{6}|\d{5})"
  bbb =Trim( .Replace(t, " $& "))
  End With
End Function
Вложения
Тип файла: xls example_23_08_2018_progr_phones.xls (35.0 Кб, 10 просмотров)

Последний раз редактировалось svsh2016; 23.08.2018 в 11:09.
svsh2016 вне форума Ответить с цитированием
Старый 23.08.2018, 13:10   #13
Alexey200999
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 15
По умолчанию

Цитата:
Сообщение от svsh2016 Посмотреть сообщение
вариант пользовательской функции в столбце G для #11 и еще вариант для #1 функция bbb

Код:
 Function aaa$(t$)
  t = Replace(Replace(Replace(t, "(", ""), "-", ""), ")", "")
With CreateObject("VBScript.RegExp"): .Pattern = "^(?:\+7|9|7)": aaa = .Replace(t, "8")
End With
End Function
Код:
Function bbb$(t$)
  With CreateObject("vbscript.regexp"):   .Global = True: .Pattern = "(\d{11}|\d{6}|\d{5})"
  bbb =Trim( .Replace(t, " $& "))
  End With
End Function
Не совсем то что нужно, проблема в том, это не отдельный столбец с номерами телефонов, а телефоны в тексте, нужен макрос, который находит номер в тексте (по заложенной маске) и корректирует только номер, не задевая текста...
Вложения
Тип файла: xls example_23_08_2018_progr_phones1.xls (36.5 Кб, 8 просмотров)

Последний раз редактировалось Alexey200999; 23.08.2018 в 13:13.
Alexey200999 вне форума Ответить с цитированием
Старый 23.08.2018, 13:15   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Alexey200999 Посмотреть сообщение
проблема в том, это не отдельный столбец с номерами телефонов, а телефоны в тексте, нужен макрос
а в чём проблема сделать тестовый XLS файлик, в котором заполнить выдуманными данными точно так же, как в вашем файле? Желательно, чтобы в примере присутствовали все возможные варианты.
этот файлик выложить на форум (либо непосредственно, либо сжав предварительно в архив).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.08.2018, 13:30   #15
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

добрый день,вариант bbb для #1 как раз для текста для #11 приведите файл пример(что дано и как надо)
Вложения
Тип файла: xls example_23_08_2018_progr_phones2.xls (35.5 Кб, 9 просмотров)
svsh2016 вне форума Ответить с цитированием
Старый 23.08.2018, 13:41   #16
Alexey200999
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 15
По умолчанию

Образец файла
Вложения
Тип файла: xlsx образец.xlsx (10.3 Кб, 8 просмотров)

Последний раз редактировалось Alexey200999; 23.08.2018 в 13:47.
Alexey200999 вне форума Ответить с цитированием
Старый 23.08.2018, 14:12   #17
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

вариант функции для #16 в A11

Код:
 Function vvv$(t$)
  Dim t1$
t = Replace(Replace(Replace(t, "(", ""), "-", ""), ")", "")
    With CreateObject("scriptcontrol"): .Language = "JScript"
         t1 = .Eval("'" & t & "'.replace(/(?:\+7|9|7)/,function(t1) { return 8;})")
    End With
   With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "(?:\d{11}|\d{6})": vvv = .Replace(t, " $& ")
End With
End Function
Вложения
Тип файла: xls example_23_08_2018_progr_last.xls (45.5 Кб, 15 просмотров)

Последний раз редактировалось svsh2016; 23.08.2018 в 14:24.
svsh2016 вне форума Ответить с цитированием
Старый 23.08.2018, 14:26   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

svsh2016, у меня ваш пример вообще не работает (Window 7, Excel 2010).
в лист возвращается ошибка !ЗНАЧ
в отладчике VBA доходит до строки With CreateObject("scriptcontrol"): .Language = "JScript"
и всё.
похоже дальше не идёт, поэтому vvv не присваивается.

p.s. пишу просто для сведения. Возможно, что у автора темы всё будет работать хорошо.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.08.2018, 16:45   #19
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

добрый день,-сегодня-завтра занят по работе,-у Вас очень разнородные данные,попробуйте допилить вариант функции uuu -удаляет скобки,тире,+
ставит пробелы вокруг телефонов в тексте,работает в строках 1,3,4,5,6-в строке 2 надо чуть доработать

Код:
Function uuu$(t$)
With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "(?:\-|\+|\(|\))(\d)": t = .Replace(t, "$1")
 .Pattern = "\b(?:\d{11}|(\d{6}))\b": uuu = Trim(.Replace(t, " $& "))
.Pattern = " 7": If .test(uuu) Then uuu = .Replace(uuu, " 8")
End With
End Function
Вложения
Тип файла: xls example_23_08_2018_progr_last2.xls (44.5 Кб, 11 просмотров)

Последний раз редактировалось svsh2016; 23.08.2018 в 20:30.
svsh2016 вне форума Ответить с цитированием
Старый 23.08.2018, 20:46   #20
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

добрый вечер,вот несколько доработанный вариант предыдущей функции в столбце C

Код:
Function uuu$(t$)
With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "(?:\-|\+|\(|\))(\d)": t = .Replace(t, "$1")
 .Pattern = "\b(?:\d{11}|(\d{6}))\b": uuu = Trim(.Replace(t, " $& "))
 .Pattern = " 7": If .test(uuu) Then uuu = .Replace(uuu, " 8")
End With
End Function
Вложения
Тип файла: xls example_23_08_2018_progr_last3.xls (49.5 Кб, 10 просмотров)

Последний раз редактировалось svsh2016; 23.08.2018 в 22:00.
svsh2016 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слипшийся текст, как разделить? zvmofficial Microsoft Office Excel 9 22.03.2018 09:33
Как разделить текст в Word? almazenok Общие вопросы Delphi 5 15.02.2011 15:45
как в ячейке разделить текст на абзацы evdss Microsoft Office Excel 1 18.10.2010 08:52
как разделить текст на переменные GAGARIN-NEW Общие вопросы Delphi 2 07.10.2007 15:24
Как разделить текст в Tedit на 2 переменные. Ната Общие вопросы Delphi 2 23.04.2007 12:48