Добрый день! Нужно поменять из основного формата, чтобы номера телефонов отображались в виде: +7 (999) 999-99-99. Формат ячеек использовать нельзя, так как при загрузке файла по месту требования, формат файла теряется и номера остаются набраны в первоначальном виде. Файл прилагается.
maves, а всегда они вбиваются как сейчас в примере? потому что это может влиять на решение...если возможны разные вводы тел. номеров покажите их в примере максимально больше
Спасибо. Да они всегда вбиваются по разному, разными людьми. Поэтому и хотелось бы автоматически их как-то преобразовать в один формат вида +7 (999) 999-99-99 Прикрепила файл с различными вариантами
А можно ли в этом же столбце как то заменить. В этом файле должны быть указаны именно номера в одном столбце, чтобы они не дублировались, второй столбец чисто для второго контактного номера.
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
А если номер вбит по ошибке без префикса +7 или 8, то ни одно решение выше не работает, что привести к единому формату +7(000)000-00-00 или 8(000)000-00-00 Оговорка: макрос от Polkilo работает, но
Формула от Сергей не приводит к форме номера без префикса +7 или 8. Такое часто бывает Макрос от Михаил Лебедев то же, не приводит к форме номера без префикса +7 или 8. Такое часто бывает
Макрос от Polkilo работает корректно, но только по первому столбцу, нет формы выбора столбца или диапазона
Что бы добить тему до готового решения, нужно: - иметь возможность выбрать диапазон - иметь возможность выбрать формат: +7(000)000-00-00 или 8(000)000-00-00 или 80000000000 (такой формат для всех ячеек, иначе с + формула считается)
RUSBelorus, выше было обозначено приведите пример возможных вариантов для них и сделано если у вас корявые вводные создайте отдельную тему и покажите их
зачем плодить кучу тем одной тематики ? Вы дали решение на приведенные формы, здорово. Я показал на каких формах, а они часто корявые, решение не работает. Плюс добавил, как превратить Ваше решение в полноценный инструмент для работы и поверьте, много будет людей кто скажет Вам еще одно спасибо!
Сергей написал: - иметь возможность выбрать диапазон- иметь возможность выбрать формат: +7(000)000-00-00 или 8(000)000-00-00 или 80000000000 (такой формат для всех ячеек, иначе с + формула считается)
Тема избита вдоль и поперек, а дальше будет мусолиться такими как Я (простите). Я говорю про законченное решение для всех и всякого. Такого нет нигде
- иметь возможность выбрать диапазон - иметь возможность выбрать формат: +7(000)000-00-00 или 8(000)000-00-00 или 80000000000 (такой формат для всех ячеек, иначе с + формула считается)
PS сам пользуюсь приведением телефонов к формату и знаю о чем говорю.
RUSBelorus, человеческие корявые ручки могут такого написать, что никакие формулы, а возможно и макросы это не исправят. В таком случае лучше вводить данные по шаблону и запрещать ввод данных не соответвущих ему.
RUSBelorus написал: PS сам пользуюсь приведением телефонов к формату и знаю о чем говорю.
и в чем проблема то непонятно форумчане предоставили решение человеку у вас другая проблема у каждого человека свои проблемы и их надо сортировать нет в жизни универсальной волшебной палочки которая выравнивает кривые ручки
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
ну да все человечество с ней бъется называется искусственный интелект который будет определять все хотелки человечества и исправлять их ошибки (главное чтоб не обиделся и не помножил на ноль всех)
Вы все усложняете. Вот все 4 формата номера, которые я постоянно встречаю от клиентов, не считаю что это искусственный интеллект: +79250966362 79250966362 89250966362 9250966362 PS только макрос Polkilo их все обрабатывает
а то что они могут быть в разных столбиках и это не ИК.
А Вы оптимист Приходилось обрабатывать, насмотрелся. +/7/8 слева в разных вариациях - цветочки. Номер слитно, с пробелами, с разными разделителями, номер отделен от текста пробелом, номер слитно с текстом ,экспоненциальный формат, со знаками вопроса вместо некоторых цифр...
Я писал о "всех 4-х форматах", которые Вы встречаете. И о том, что кроме написания номера, он может быть в тексте с другими числовыми днными (тоже, кстати, написанными "мизинцем правой ноги черех левое плечо". И обрабка таких шедевров не заканчивается написанием макроса - через время возврат к работе - "а мы еще вот такое обнаружили, доработайте, пожалуйста"
RUSBelorus написал: Формула от Сергей не приводит к форме номера без префикса +7 или 8. Такое часто бывает Макрос от Михаил Лебедев то же, не приводит к форме номера без префикса +7 или 8. Такое часто бывает Макрос от Polkilo работает корректно, но только по первому столбцу, нет формы выбора столбца или диапазона RUSBelorus написал: Так задача простая, объединить решения в одно.
Вы что, и с простой задачей сами справиться не можете?