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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2018, 09:33   #1
Alexey200999
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 15
По умолчанию Как разделить слипшийся текст в excel

День добрый форумчане!
Подскажите пожалуйста, как разделить слипшийся текст в excel?
Необходимо найти 11 или 6 (как вариант и 5) цифр в тексте и поставить пробел до и после номера, это возможно?
пример:
Иванов Иван оставил номер89500887766 и сообщил, что если номер недоступен, то позвонить жене89500887755, или по номеру556677.
результат:
Иванов Иван оставил номер 89500887766 и сообщил, что если номер недоступен, то позвонить жене 89500887755 , или по номеру 556677 .
Alexey200999 вне форума Ответить с цитированием
Старый 21.08.2018, 11:05   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

пользовательская функция
Код:
Function AL(x) As String
Static re As Object
  If re Is Nothing Then
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "(^|\D)(\d{11}|\d{6}|\d{5})($|\D)" 'число из 5, 6 или 11 цифр
    re.Global = True
  End If
  AL = WorksheetFunction.Trim(re.Replace(x, "$1 $2 $3"))
End Function
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 21.08.2018, 12:30   #3
Alexey200999
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
пользовательская функция
Код:
Function AL(x) As String
Static re As Object
  If re Is Nothing Then
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "(^|\D)(\d{11}|\d{6}|\d{5})($|\D)" 'число из 5, 6 или 11 цифр
    re.Global = True
  End If
  AL = WorksheetFunction.Trim(re.Replace(x, "$1 $2 $3"))
End Function

Спасибо большое!!!!!
Как пользовательская функция работает отлично!

требуется для обработки больших таблиц, как из этого кода сделать макрос?

Последний раз редактировалось Alexey200999; 21.08.2018 в 12:45.
Alexey200999 вне форума Ответить с цитированием
Старый 21.08.2018, 13:15   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

так и сделайте:
Код:
sub M1
  dim r&
  for r =1 to 100000
    cells(r,1) = AL(cells(r,1))
  next
end sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 21.08.2018, 13:44   #5
Alexey200999
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 15
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
так и сделайте:
Код:
sub M1
  dim r&
  for r =1 to 100000
    cells(r,1) = AL(cells(r,1))
  next
end sub
Вот тут не понятно.... что именно так сделать?
Как пользовательская функция работает, но мне нужно макросом обработать большущий столбец...

Код который Вы написали у меня почему то не срабатывает... как им воспользоваться?
Alexey200999 вне форума Ответить с цитированием
Старый 21.08.2018, 14:38   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Alexey200999 Посмотреть сообщение
Код который Вы написали у меня почему то не срабатывает... как им воспользоваться?
вставил в модуль пользовательскую функцию

потом вставил в код листа макрос, который обрабатывает первые ячейки в столбце 1 - заменяя значение на значение, которое возвращает пользовательская функция
Вложения
Тип файла: rar Пример_для_замены.rar (13.3 Кб, 13 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.08.2018, 06:22   #7
Alexey200999
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 15
По умолчанию

Всем спасибо!!!! Работает!!

Подскажите, можно ли макросом найти в тексте номер телефона и подкорректировать его?
9500887766 -> 89500887766
79500887766 -> 89500887766
8-950-088-77-66 -> 89500887766
-8-950-088-77-66 -> 89500887766
8(950)088-77-66 -> 89500887766
+7(950)088-77-66 -> 89500887766
Необходимо всё привести к одному формату, поставить пробел до и после номера телефона (отделить от текста, так как зачастую написано слитно), без макросов невозможно...

Последний раз редактировалось Alexey200999; 23.08.2018 в 05:50.
Alexey200999 вне форума Ответить с цитированием
Старый 22.08.2018, 11:52   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

можно.
нужно, нужно только показать ВСЕ варианты написания номеров, которые могут встретится в данных
их всего 4 или есть еще?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.08.2018, 13:04   #9
Alexey200999
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 15
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
можно.
нужно, нужно только показать ВСЕ варианты написания номеров, которые могут встретится в данных
их всего 4 или есть еще?
Попадаются и такие как 8 950 088 77 66, (с пробелами) но с ними скорее всего ничего не сделать уже
Возможно и еще какие варианты попадутся, я думаю допилю попробую самостоятельно... просто проблема в том что это не отдельный столбец, а номера в перемешку с текстом

Последний раз редактировалось Alexey200999; 22.08.2018 в 13:07.
Alexey200999 вне форума Ответить с цитированием
Старый 22.08.2018, 14:09   #10
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Alexey200999, приложите ФАЙЛ, где номера в перемешку с текстом.
Потому что если номера телефонов это единственные цифры в тексте - это одно, а если есть еще какие-то числа (номера домов, номера счетов) - это совсем другое.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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