Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удалить пробелы только между цифрами - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Удалить пробелы только между цифрами
emkub Дата: Вторник, 31.01.2017, 01:44 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте Товарищи!
Часы бесполезных поисков в интернете снова привели на этот форум.
Помогите пожалуйста решить вопрос.
В ячейках столбца "N" имеется текст вперемешку с номерами телефонов. В номерах телефонов попадаются пробелы или дефисы, которые нужно удалить.
Другими словами, нужно удалить пробелы и дефисы только между цифрами.
Это возможно сделать без регулярных выражений?
Заранее благодарен откликнувшимся!
К сообщению приложен файл: 8113199.xlsx (9.6 Kb)
 
Ответить
СообщениеЗдравствуйте Товарищи!
Часы бесполезных поисков в интернете снова привели на этот форум.
Помогите пожалуйста решить вопрос.
В ячейках столбца "N" имеется текст вперемешку с номерами телефонов. В номерах телефонов попадаются пробелы или дефисы, которые нужно удалить.
Другими словами, нужно удалить пробелы и дефисы только между цифрами.
Это возможно сделать без регулярных выражений?
Заранее благодарен откликнувшимся!

Автор - emkub
Дата добавления - 31.01.2017 в 01:44
bmv98rus Дата: Вторник, 31.01.2017, 08:12 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4149
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
emkub,
Уж не знаю почему
Это возможно сделать без регулярных выражений?
но тупым перебором
[vba]
Код
Function DelSpacesBetweenDigits(Line As String) as String
    Dim i As Integer
    Dim Ch1 As String, Ch2 As String, Ch3 As String, Result As String
    Line = WorksheetFunction.Trim(Line)
    For i = 1 To Len(Line) - 1
        Ch1 = Mid(Line, i, 1)
        Ch2 = Mid(Line, i + 1, 1)
        Ch3 = Mid(Line, i + 2, 1)
        If Ch1 >= "0" And Ch1 <= "9" And Ch3 >= "0" And Ch3 <= "9" And Ch2 = " " Then
            i = i + 1
            Ch2 = ""
        End If
        Result = Result & Ch1
    Next i
    Result = Result & Ch2 & Ch3
    DelSpacesBetweenDigits = Result
End Function
[/vba]

Можно поиграть с instr и сперва поискать пробелы , потом что проверить что перед и после, но не проще получится.
Можно Другим перебором
[vba]
Код
Function DelSpacesBetweenDigits1(Line As String) As String
    Dim i As Integer, j As Integer
    Line = WorksheetFunction.Trim(Line)
    For i = 0 To 9
        For j = 0 To 9
            Line = Replace(Line, i & " " & j, i & j)
        Next j
    Next i
    DelSpacesBetweenDigits1 = Line
End Function
[/vba]


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Вторник, 31.01.2017, 20:09
 
Ответить
Сообщениеemkub,
Уж не знаю почему
Это возможно сделать без регулярных выражений?
но тупым перебором
[vba]
Код
Function DelSpacesBetweenDigits(Line As String) as String
    Dim i As Integer
    Dim Ch1 As String, Ch2 As String, Ch3 As String, Result As String
    Line = WorksheetFunction.Trim(Line)
    For i = 1 To Len(Line) - 1
        Ch1 = Mid(Line, i, 1)
        Ch2 = Mid(Line, i + 1, 1)
        Ch3 = Mid(Line, i + 2, 1)
        If Ch1 >= "0" And Ch1 <= "9" And Ch3 >= "0" And Ch3 <= "9" And Ch2 = " " Then
            i = i + 1
            Ch2 = ""
        End If
        Result = Result & Ch1
    Next i
    Result = Result & Ch2 & Ch3
    DelSpacesBetweenDigits = Result
End Function
[/vba]

Можно поиграть с instr и сперва поискать пробелы , потом что проверить что перед и после, но не проще получится.
Можно Другим перебором
[vba]
Код
Function DelSpacesBetweenDigits1(Line As String) As String
    Dim i As Integer, j As Integer
    Line = WorksheetFunction.Trim(Line)
    For i = 0 To 9
        For j = 0 To 9
            Line = Replace(Line, i & " " & j, i & j)
        Next j
    Next i
    DelSpacesBetweenDigits1 = Line
End Function
[/vba]

Автор - bmv98rus
Дата добавления - 31.01.2017 в 08:12
_Boroda_ Дата: Вторник, 31.01.2017, 09:07 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Михаил, а вот этим
Replace(Replace(Line, "  ", " "), "  ", " ")
ВЫ убираете двойные и тройные пробелы? А четверные и более?
VBA-шная Trim конечно не подходит, а вот Excle-ная должна выручить[vba]
Код
WorksheetFunction.Trim
[/vba]
Не, это я не проснулся еще - с четырьмями все нормально, а вот с пятермыми и более - уже не очень


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМихаил, а вот этим
Replace(Replace(Line, "  ", " "), "  ", " ")
ВЫ убираете двойные и тройные пробелы? А четверные и более?
VBA-шная Trim конечно не подходит, а вот Excle-ная должна выручить[vba]
Код
WorksheetFunction.Trim
[/vba]
Не, это я не проснулся еще - с четырьмями все нормально, а вот с пятермыми и более - уже не очень

Автор - _Boroda_
Дата добавления - 31.01.2017 в 09:07
bmv98rus Дата: Вторник, 31.01.2017, 09:25 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4149
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
Trim

Привычка, часто на VBscript пишу и порой ограничения того автоматом в VBA лезут, хотя WorksheetFunction конечно знаю и в данном случае Вы правы, одну итерацию пропустил
надо было так [vba]
Код
Line=Replace(Replace(Replace(Line, "  ", " "), "  ", " "), "  ", " ")
[/vba]
Это действительно убирает все множественные пробелы. Спс.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Вторник, 31.01.2017, 14:24
 
Ответить
Сообщение
Trim

Привычка, часто на VBscript пишу и порой ограничения того автоматом в VBA лезут, хотя WorksheetFunction конечно знаю и в данном случае Вы правы, одну итерацию пропустил
надо было так [vba]
Код
Line=Replace(Replace(Replace(Line, "  ", " "), "  ", " "), "  ", " ")
[/vba]
Это действительно убирает все множественные пробелы. Спс.

Автор - bmv98rus
Дата добавления - 31.01.2017 в 09:25
_Boroda_ Дата: Вторник, 31.01.2017, 09:27 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
одну итерацию пропустил

Line=Replace(Replace(Replace(Line, "  ", " "), "  ", " "), "  ", " ")


9 пробелов и больше :D


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
одну итерацию пропустил

Line=Replace(Replace(Replace(Line, "  ", " "), "  ", " "), "  ", " ")


9 пробелов и больше :D

Автор - _Boroda_
Дата добавления - 31.01.2017 в 09:27
bmv98rus Дата: Вторник, 31.01.2017, 09:33 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4149
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
9 пробелов и больше

Полез смотреть, как делал . Точно было с любым количеством пробеловю еще раз спс.
Ё, там 4 вложения было
[vba]
Код
b=Replace(Replace(Replace(Replace(Trim(a), "  " , " "),"  "," "),"  "," "),"  "," ")
[/vba]
Перебор, заменяю на Worksheetfunction


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Вторник, 31.01.2017, 09:51
 
Ответить
Сообщение
9 пробелов и больше

Полез смотреть, как делал . Точно было с любым количеством пробеловю еще раз спс.
Ё, там 4 вложения было
[vba]
Код
b=Replace(Replace(Replace(Replace(Trim(a), "  " , " "),"  "," "),"  "," "),"  "," ")
[/vba]
Перебор, заменяю на Worksheetfunction

Автор - bmv98rus
Дата добавления - 31.01.2017 в 09:33
emkub Дата: Вторник, 31.01.2017, 14:09 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
ага. Понятно. Почему-то думал, что есть способ попроще...
А как это будет выглядеть с регулярными выражениями?
 
Ответить
Сообщениеага. Понятно. Почему-то думал, что есть способ попроще...
А как это будет выглядеть с регулярными выражениями?

Автор - emkub
Дата добавления - 31.01.2017 в 14:09
_Boroda_ Дата: Вторник, 31.01.2017, 16:07 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
, там 4 вложения было

:D :D :D
17 пробелов и больше

Степени двойки + 1


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
, там 4 вложения было

:D :D :D
17 пробелов и больше

Степени двойки + 1

Автор - _Boroda_
Дата добавления - 31.01.2017 в 16:07
bmv98rus Дата: Вторник, 31.01.2017, 16:44 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4149
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
17 пробелов

от ить пытливый ум :-). Добью попозже, самого задело :-).


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение
17 пробелов

от ить пытливый ум :-). Добью попозже, самого задело :-).

Автор - bmv98rus
Дата добавления - 31.01.2017 в 16:44
emkub Дата: Вторник, 31.01.2017, 18:16 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 171
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Вы уж простите меня, но я не знаю, как правильно вызвать эти (вышеописанные) функции. Точнее, не знаю, какие параметры указать при вызове.
 
Ответить
СообщениеВы уж простите меня, но я не знаю, как правильно вызвать эти (вышеописанные) функции. Точнее, не знаю, какие параметры указать при вызове.

Автор - emkub
Дата добавления - 31.01.2017 в 18:16
bmv98rus Дата: Вторник, 31.01.2017, 19:48 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4149
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
emkub,

Простите,, мы тут о своем с Александром заболтались.

Если вы про предложенные выше функции, то поместите это в модуль и можно мрямо с листа вызывать, как обычную встроенную, указав ячейку столбца N.
Ну или делать скрипт которые перебирает нужный вам диапазон и значенеи ячеки опять как аргумент.
Все от задачи зависит.

Файл с функциями листа приложил, в первом посте подправил.
К сообщению приложен файл: Copy_of_8113199.xlsm (16.4 Kb)


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Вторник, 31.01.2017, 20:22
 
Ответить
Сообщениеemkub,

Простите,, мы тут о своем с Александром заболтались.

Если вы про предложенные выше функции, то поместите это в модуль и можно мрямо с листа вызывать, как обычную встроенную, указав ячейку столбца N.
Ну или делать скрипт которые перебирает нужный вам диапазон и значенеи ячеки опять как аргумент.
Все от задачи зависит.

Файл с функциями листа приложил, в первом посте подправил.

Автор - bmv98rus
Дата добавления - 31.01.2017 в 19:48
K-SerJC Дата: Среда, 01.02.2017, 08:51 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
:D :D :D
17 пробелов и больше

Степени двойки + 1


сколь угодно двойных пробелов:
[vba]
Код

Function NoDoubleSpase(str As String) As String
ST:
If InStr(1, str, "  ") <> 0 Then str = Replace(str, "  ", " ") :GoTo ST
NoDoubleSpase = str
End Function
[/vba]


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщение
:D :D :D
17 пробелов и больше

Степени двойки + 1


сколь угодно двойных пробелов:
[vba]
Код

Function NoDoubleSpase(str As String) As String
ST:
If InStr(1, str, "  ") <> 0 Then str = Replace(str, "  ", " ") :GoTo ST
NoDoubleSpase = str
End Function
[/vba]

Автор - K-SerJC
Дата добавления - 01.02.2017 в 08:51
_Boroda_ Дата: Среда, 01.02.2017, 09:08 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
сколь угодно двойных пробелов:

Да причем здесь Ваш цикл-то? Выше давно уже написано одно из нормальных решений.
Я пытаюсь наглядно убедить Михаила в том, что ограниченное количеставо Реплейсов не поможет. Ну, разве что упремся в ограничения на длину текстовой строки. А цикл мы и сами в состоянии написать, вопрос не в этом был.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
сколь угодно двойных пробелов:

Да причем здесь Ваш цикл-то? Выше давно уже написано одно из нормальных решений.
Я пытаюсь наглядно убедить Михаила в том, что ограниченное количеставо Реплейсов не поможет. Ну, разве что упремся в ограничения на длину текстовой строки. А цикл мы и сами в состоянии написать, вопрос не в этом был.

Автор - _Boroda_
Дата добавления - 01.02.2017 в 09:08
bmv98rus Дата: Среда, 01.02.2017, 11:32 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4149
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
[offtop]
Я пытаюсь наглядно убедить Михаила в том
Михаила убедить без аргументов сложно, а с аргументами, да еще математическими (Степени двойки + 1) - элементарно :-) .
В результате можно изменив в итерации количество искомых пробелов с заменой на один, например так Space(8),4,3,2, отсрочить появление не обработанного двойного, но оно оюязательно наступит при стремлениии последовательных пробелов к бесконечности. Конечно это придуманный случай, но вопрос скорее в ограниченности подхода используемого в конкртеном случае. Александр спс за науку.[/offtop]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[offtop]
Я пытаюсь наглядно убедить Михаила в том
Михаила убедить без аргументов сложно, а с аргументами, да еще математическими (Степени двойки + 1) - элементарно :-) .
В результате можно изменив в итерации количество искомых пробелов с заменой на один, например так Space(8),4,3,2, отсрочить появление не обработанного двойного, но оно оюязательно наступит при стремлениии последовательных пробелов к бесконечности. Конечно это придуманный случай, но вопрос скорее в ограниченности подхода используемого в конкртеном случае. Александр спс за науку.[/offtop]

Автор - bmv98rus
Дата добавления - 01.02.2017 в 11:32
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!