Страницы: 1
RSS
Как отделить текст и цифры друг от друга пробелом
 
Здравствуйте!
Есть ли формула, которая смогла бы, на пример, из
2йпер Маяковского65
сделать
2 йпер Маяковского 65 ?

Т.е. отделить число от текста пробелом с лева и справа.
Изменено: Isa Balaev - 28.02.2024 09:04:50
Мы - весёлые ребята,
Мы - ребята-экселята.
 
как бы правильно так.
2-й пер
 
Цитата
V написал:
как бы правильно так.2-й пер
Да, так-то правильно, но так адреса править вряд ли возможно.
Это мне надо для сличения адресов из разных реестров с помощью Fuzzy Lookup.
Где-то написано Маяковского д7А, а мне надо, чтобы было Маяковского д 7 А
Изменено: Isa Balaev - 28.02.2024 09:09:38
Мы - весёлые ребята,
Мы - ребята-экселята.
 
так во втором реестре пробелы убирайте
 
Цитата
nilske написал:
во втором реестре пробелы убирайте
так себе получится, насколько я знаю эту надстройку.
Isa Balaev, Вы бы озвучили какие средства доступны для решения: только формулы, макросы, Power Query. Т.к. начнут сейчас предлагать решения и начнется: а макросы нельзя, а Power Query неудобно и т.п. :)

P.S. Пример небольшой тоже не помешал бы...
Изменено: Дмитрий(The_Prist) Щербаков - 28.02.2024 09:14:09
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
nilske написал:
так во втором реестре пробелы убирайте
Пробовал. Результат плохой бывает.
Мы - весёлые ребята,
Мы - ребята-экселята.
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
какие средства
Цитата
Isa Balaev написал:
формула
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Вы бы озвучили какие средства доступны для решения: только формулы, макросы, Power Query.
Мне бы формулу...
А если нет, можно макросом.
Мы - весёлые ребята,
Мы - ребята-экселята.
 
Формулой точно фигня может получиться стоэтажная. Макросом как-то проще получается. Вот UDF:
Код
Function SplitByNum(sTxt$)
    Dim s$, snum$, sres$
    Dim li&, le&
    
    For li = Len(sTxt) To 1 Step -1
        s = Mid(sTxt, li, 1)
        snum = ""
        If IsNumeric(s) Then
            le = li
            If li = 1 Then
                snum = s & " "
            End If
        Else
            If le > 0 Then
                snum = Mid(sTxt, li + 1, le - li + 1)
                snum = s & " " & snum & " "
                le = 0
            Else
                snum = s
            End If
        End If
        sres = snum & sres
    Next
    SplitByNum = Application.Trim(sres)
End Function

может не самая оптимальная - не особо-то старался красиво сделать :) Но должно работать. Т.к. для примера только один адрес - проверил тоже только на нем.
Изменено: Дмитрий(The_Prist) Щербаков - 28.02.2024 10:11:06 (опечатка)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Код
=ЕСЛИОШИБКА(СЖПРОБЕЛЫ(ОБЪЕДИНИТЬ("";1;ЕСЛИ(ЕТЕКСТ(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(СЖПРОБЕЛЫ(
ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;
0;" 0 ");"1";" 1 ");"2";" 2 ");"3";" 3 ");"4";" 4 ");"5";" 5 ");"6";" 6 ");"7";" 7 ");"8";" 8 ");"9";" 9 "));" ";"</i><i>")&"</i></j>";"//i"));
" "&ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(СЖПРОБЕЛЫ(
ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;
0;" 0 ");"1";" 1 ");"2";" 2 ");"3";" 3 ");"4";" 4 ");"5";" 5 ");"6";" 6 ");"7";" 7 ");"8";" 8 ");"9";" 9 "));" ";"</i><i>")&"</i></j>";"//i")&" ";
(ФИЛЬТР.XML("<j><i>"&
ПОДСТАВИТЬ(СЖПРОБЕЛЫ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;
0;" 0 ");"1";" 1 ");"2";" 2 ");"3";" 3 ");"4";" 4 ");"5";" 5 ");"6";" 6 ");"7";" 7 ");"8";" 8 ");"9";" 9 "));" ";"</i><i>")&"</i></j>";"//i")))));"")
 
Ребята, всем большое спасибо!!!
Благодарю!
Мы - весёлые ребята,
Мы - ребята-экселята.
 
вот такой быстрый вариант ещё, функцией из надстройки PLEX, пусть тоже будет )

ну и дальше заменять "йпер" на " йпер" или "й пер",
                                      "яул" на " яул" или "я ул" и т.д.
 
Цитата
nilske написал:
вот такой быстрый вариант ещё
почему-то "2" от "йпер" не отделила функция.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
почему-то
может быть не знает что так нужно ТС?
на мой взгляд, предпочтительнее "й пер" и совсем несложно сделать такую замену по всем строкам через CTRL+H
 
До кучи э21
=LET(а;A1;б;ПОСЛЕД(ДЛСТР(а));в;ПСТР(а;б;1);СЦЕП(ЕСНД(ЕСЛИ((ЧАСТОТА(б;б*ЕОШ(-в))>1)+(ЧАСТОТА(б;б*ЕЧИСЛО(-в))>1);" ";"")&в;"")))
 
Цитата
можно макросом.
Попробуйте так
Код
Sub DigitLetter()
Dim i As Long
Dim iLastRow As Long
 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
With CreateObject("VBScript.RegExp")
  .Global = True
  .Pattern = "(\d+)"
  For i = 1 To iLastRow
    If .Test(Cells(i, 1)) Then
      Cells(i, 2) = WorksheetFunction.Trim(.Replace(Cells(i, 1), " $& "))
    End If
  Next
End With
End Sub
Страницы: 1
Наверх