Добрый день! Нужно поменять из основного формата, чтобы номера телефонов отображались в виде: +7 (999) 999-99-99. Формат ячеек использовать нельзя, так как при загрузке файла по месту требования, формат файла теряется и номера остаются набраны в первоначальном виде. Файл прилагается.
maves, а всегда они вбиваются как сейчас в примере? потому что это может влиять на решение...если возможны разные вводы тел. номеров покажите их в примере максимально больше
Не бойтесь совершенства. Вам его не достичь.
Пользователь
Сообщений: Регистрация: 15.01.2020
15.01.2020 11:38:22
Спасибо. Да они всегда вбиваются по разному, разными людьми. Поэтому и хотелось бы автоматически их как-то преобразовать в один формат вида +7 (999) 999-99-99 Прикрепила файл с различными вариантами
А можно ли в этом же столбце как то заменить. В этом файле должны быть указаны именно номера в одном столбце, чтобы они не дублировались, второй столбец чисто для второго контактного номера.
Пользователь
Сообщений: Регистрация: 01.01.1970
15.01.2020 12:26:26
Цитата
maves написал: А можно ли в этом же столбце как то заменить.
можно но это уже макрос
Лень двигатель прогресса, доказано!!!
Пользователь
Сообщений: Регистрация: 24.01.2019
15.01.2020 12:29:38
maves, учтите, после +7 пробела нет, если он нужен, то оберните еще раз в ПОДСТАВИТЬ и замените "(" на " ("
Sub ololo()
Dim i As Long
Dim MyPhone As String
For i = 3 To ThisWorkbook.Sheets("Форма").Cells(Rows.Count, 9).End(xlUp).Row 'Крутим цикл по 9 столбцу за исключением шапки
MyPhone = OnlyNumbers(ThisWorkbook.Sheets("Форма").Cells(i, 9)) 'Оставляем в номере только цифры
If Len(MyPhone) >= 10 Then
MyPhone = Right(MyPhone, 10) 'забираем последние 10 символов
MyPhone = "+7 (" & Mid(MyPhone, 1, 3) & ") " & Mid(MyPhone, 4, 3) & "-" & Mid(MyPhone, 7, 2) & "-" & Mid(MyPhone, 9, 2) 'Сцепляем
ThisWorkbook.Sheets("Форма").Cells(i, 9) = MyPhone 'выводим на лист
End If
Next
End Sub
Function OnlyNumbers(ByVal MyString As String) As String
Dim i As Long
Dim Numbers As String
If Len(MyString) >= 1 Then
For i = 1 To Len(MyString)
If IsNumeric(Mid(MyString, i, 1)) Then
Numbers = Numbers & Mid(MyString, i, 1)
End If
Next
OnlyNumbers = CStr(Numbers)
End If
End Function
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
Пользователь
Сообщений: Регистрация: 15.01.2020
15.01.2020 13:34:38
Всем спасибо за ответы!
Изменено: - 15.01.2020 13:45:30(Неправильное использование цитат)
Пользователь
Сообщений: Регистрация: 15.11.2014
15.01.2020 19:49:54
А если номер вбит по ошибке без префикса +7 или 8, то ни одно решение выше не работает, что привести к единому формату +7(000)000-00-00 или 8(000)000-00-00 Оговорка: макрос от работает, но
Формула от не приводит к форме номера без префикса +7 или 8. Такое часто бывает Макрос от то же, не приводит к форме номера без префикса +7 или 8. Такое часто бывает
Макрос от работает корректно, но только по первому столбцу, нет формы выбора столбца или диапазона
Что бы добить тему до готового решения, нужно: - иметь возможность выбрать диапазон - иметь возможность выбрать формат: +7(000)000-00-00 или 8(000)000-00-00 или 80000000000 (такой формат для всех ячеек, иначе с + формула считается)
Изменено: - 15.01.2020 19:50:33
Пользователь
Сообщений: Регистрация: 01.01.1970
15.01.2020 20:07:32
RUSBelorus, выше было обозначено приведите пример возможных вариантов для них и сделано если у вас корявые вводные создайте отдельную тему и покажите их
зачем плодить кучу тем одной тематики ? Вы дали решение на приведенные формы, здорово. Я показал на каких формах, а они часто корявые, решение не работает. Плюс добавил, как превратить Ваше решение в полноценный инструмент для работы и поверьте, много будет людей кто скажет Вам еще одно спасибо!
Пользователь
Сообщений: Регистрация: 01.01.1970
15.01.2020 20:31:44
RUSBelorus, тема по приведению телефонных номеров к одному виду избита на нашей планете и формулы и удф и макросы если захотеть можно найти всё
Лень двигатель прогресса, доказано!!!
Пользователь
Сообщений: Регистрация: 15.11.2014
15.01.2020 20:38:06
Цитата
Сергей написал: - иметь возможность выбрать диапазон- иметь возможность выбрать формат: +7(000)000-00-00 или 8(000)000-00-00 или 80000000000 (такой формат для всех ячеек, иначе с + формула считается)
Тема избита вдоль и поперек, а дальше будет мусолиться такими как Я (простите). Я говорю про законченное решение для всех и всякого. Такого нет нигде
- иметь возможность выбрать диапазон - иметь возможность выбрать формат: +7(000)000-00-00 или 8(000)000-00-00 или 80000000000 (такой формат для всех ячеек, иначе с + формула считается)
PS сам пользуюсь приведением телефонов к формату и знаю о чем говорю.
Изменено: - 15.01.2020 20:39:10
Пользователь
Сообщений: Регистрация: 15.02.2016
15.01.2020 20:43:02
RUSBelorus, человеческие корявые ручки могут такого написать, что никакие формулы, а возможно и макросы это не исправят. В таком случае лучше вводить данные по шаблону и запрещать ввод данных не соответвущих ему.
Даже если и по шаблону с любым префиксом. Все равно нет РЕШЕНИЯ выбрать диапазон и один из трех форматов телефона одновременно)
Изменено: - 15.01.2020 20:50:07
Пользователь
Сообщений: Регистрация: 01.01.1970
15.01.2020 20:49:01
Цитата
RUSBelorus написал: PS сам пользуюсь приведением телефонов к формату и знаю о чем говорю.
и в чем проблема то непонятно форумчане предоставили решение человеку у вас другая проблема у каждого человека свои проблемы и их надо сортировать нет в жизни универсальной волшебной палочки которая выравнивает кривые ручки
Лень двигатель прогресса, доказано!!!
Пользователь
Сообщений: Регистрация: 15.11.2014
15.01.2020 20:53:48
Так задача простая, объединить решения в одно. Не будет больше (или станет меньше на порядок) подобной
PS Получается, надеяться можно от снисхождения )
Изменено: - 15.01.2020 20:58:18
Пользователь
Сообщений: Регистрация: 21.12.2012
15.01.2020 20:59:32
UDF формат +7(000)000-00-00
Код
Public Function RgxPhone(iString As Range) As String
Dim re As Object
Dim tempString
Set re = CreateObject("vbscript.regexp")
re.Pattern = "(-|\s|\+|\(|\))"
re.Global = True
re.IgnoreCase = True
tempString = re.Replace(iString, "")
re.Pattern = "((8)|(7))(\d{3})+(\d{3})+(\d{2})+(\d{2})+"
If re.Test(tempString) Then
RgxPhone = re.Replace(tempString, "$1$2($4) $5-$6-$7")
If (Left(RgxPhone, 1) <> "8") Then
RgxPhone = "+" + RgxPhone
Else
RgxPhone = "+7" + Mid(RgxPhone, 3)
End If
End If
End Function
ну да все человечество с ней бъется называется искусственный интелект который будет определять все хотелки человечества и исправлять их ошибки (главное чтоб не обиделся и не помножил на ноль всех)
Лень двигатель прогресса, доказано!!!
Пользователь
Сообщений: Регистрация: 15.11.2014
15.01.2020 21:35:34
Вы все усложняете. Вот все 4 формата номера, которые я постоянно встречаю от клиентов, не считаю что это искусственный интеллект: +79250966362 79250966362 89250966362 9250966362 PS только макрос их все обрабатывает
а то что они могут быть в разных столбиках и это не ИК.
А Вы оптимист Приходилось обрабатывать, насмотрелся. +/7/8 слева в разных вариациях - цветочки. Номер слитно, с пробелами, с разными разделителями, номер отделен от текста пробелом, номер слитно с текстом ,экспоненциальный формат, со знаками вопроса вместо некоторых цифр...
Пользователь
Сообщений: Регистрация: 15.11.2014
15.01.2020 23:21:16
Удивитесь, макрос
+79250966362
+7 (925) 096-63-62
79250966362
+7 (925) 096-63-62
89250966362
+7 (925) 096-63-62
9250966362
+7 (925) 096-63-62
+7(925) 096 63-62
+7 (925) 096-63-62
7-925-096-63-62
+7 (925) 096-63-62
8 9 2 5 0 9 6 6 3 6 2
+7 (925) 096-63-62
(9)(2)(5)(0)(9)6 6 3 6 2
+7 (925) 096-63-62
+79250966362
+7 (925) 096-63-62
+7+9+250+966+362
+7 (925) 096-63-62
89-2509-6636-2
+7 (925) 096-63-62
9*2*50*9*66*36*2
+7 (925) 096-63-62
PS Речь об обработке телефона 10 знаков, а не об выделении телефона из текста
Изменено: - 15.01.2020 23:25:46
Пользователь
Сообщений: Регистрация: 15.09.2012
15.01.2020 23:24:49
Я писал о "всех 4-х форматах", которые Вы встречаете. И о том, что кроме написания номера, он может быть в тексте с другими числовыми днными (тоже, кстати, написанными "мизинцем правой ноги черех левое плечо". И обрабка таких шедевров не заканчивается написанием макроса - через время возврат к работе - "а мы еще вот такое обнаружили, доработайте, пожалуйста"
Пользователь
Сообщений: Регистрация: 15.11.2014
15.01.2020 23:29:19
Цитата
vikttur написал: Я писал о "всех 4-х форматах", которые Вы встречаете.
форматов действительно много, их не 4, которые пишут в заявках (и с пробелами и тире и префиксом). Уже хорошо, что есть решение.
Пользователь
Сообщений: Регистрация: 17.01.2013
16.01.2020 04:55:08
Цитата
RUSBelorus написал: Формула от Сергей не приводит к форме номера без префикса +7 или 8. Такое часто бывает Макрос от Михаил Лебедев то же, не приводит к форме номера без префикса +7 или 8. Такое часто бывает Макрос от Polkilo работает корректно, но только по первому столбцу, нет формы выбора столбца или диапазона RUSBelorus написал: Так задача простая, объединить решения в одно.
Вы что, и с простой задачей сами справиться не можете?