здесь подсказали https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=142835&a... как объединить столбцы с помощью амперсанта, объединил адрес с номерами дома, корпуса, квартиры и телефон. Но после номера дома и тире идет лишний пробел, почему? Как исправить и возможно ли не руками и не макросами? Телефоны (пусть в отдельном столбце): 7-значные номер, чаще всего один ячейке вида ###-##-##, но есть и по 2 номера в ячейке и есть вида ####### (т.е без тире). Необходимо добавить всем 8495-, чтобы получились все номера вида 8495-###-##-##. Как это сделать? Желательно, без макросов. Понятно, что есть вариант через амперсант тупо, но нет ли иного варианта, особенно учитывая, что в части таблицы отсутствуют тире между номерами телефона и есть по 2 в одной строке. Файл с примером, где указано, как пытался сделать прилагаю. Надеюсь, на этот раз ничего не нарушил.
Артем Клопов написал: Но после номера дома и тире идет лишний пробел, почему?
в ячейке H8 у вас идёт лишний пробел после номера дома и тире, т.к. в ячейке D8 (корпус) перед цифрой 2 стоит пробел ("пробел цифра 2"). Но вы глазами его не видите, а Excel видит этот пробел и добавляет его в вашу формулу. Удалить пробелы из столбца D можно так 1. Выделяете весь столбец мышкой, для этого мышкой щёлкаете на буковку D (это название столбца) 2. Нажимаете Ctrl+H 3. В поле Найти ставите 1 пробел (один раз нажимаете на клавишу пробел на клавиатуре) 4. Поле "Заменить на" оставляете пустым и нажимаете кнопку "Заменить всё"
Цитата
Артем Клопов написал: но есть и по 2 номера в ячейке
она из строк: 300-95-04 3074291 сделает 8495-300-95-04 8495-307-42-91 А как обработать ячейки, где в одной ячейке записано несколько телефонов подряд формулами я не знаю
Как вариант для приведенного примера =IF(ISNUMBER(FIND(",";F2));"8495-"& TEXT(--SUBSTITUTE(SUBSTITUTE(TRIM(LEFT(SUBSTITUTE(F2;",";" ");15));"-";"");"495";"");"###-##-##")&" " & "8495-"& TEXT(--SUBSTITUTE(SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE(F2;",";" ");15));"-";"");"495";"");"###-##-##") ; "8495-"&TEXT(--SUBSTITUTE(SUBSTITUTE(F2;"-";"");"495";"");"###-##-##"))
Function Telefon(cell As String)
Dim re As Object
Dim temp As String
Set re = CreateObject("vbscript.regexp")
re.Pattern = "(-|\s|\+|\(|\))"
re.Global = True
temp = re.Replace(cell, "")
re.Pattern = "(\d{3})?(\d{3})(\d{2})(\d{2})"
If Len(temp) = 10 And Left(temp, 3) = 495 Then
Telefon = re.Replace(temp, "8$1-$2-$3-$4")
Else
Telefon = re.Replace(temp, "8495-$2-$3-$4")
End If
End Function
Kuzmich, спасибо. Но макросы я не знаю от слова совсем. А мне важно понимать, что я делаю, это и учёба и не хочется пользоваться чужим трудом... Ещё раз спасибо.