Здравствуйте Товарищи! Часы бесполезных поисков в интернете снова привели на этот форум. Помогите пожалуйста решить вопрос. В ячейках столбца "N" имеется текст вперемешку с номерами телефонов. В номерах телефонов попадаются пробелы или дефисы, которые нужно удалить. Другими словами, нужно удалить пробелы и дефисы только между цифрами. Это возможно сделать без регулярных выражений? Заранее благодарен откликнувшимся!
Здравствуйте Товарищи! Часы бесполезных поисков в интернете снова привели на этот форум. Помогите пожалуйста решить вопрос. В ячейках столбца "N" имеется текст вперемешку с номерами телефонов. В номерах телефонов попадаются пробелы или дефисы, которые нужно удалить. Другими словами, нужно удалить пробелы и дефисы только между цифрами. Это возможно сделать без регулярных выражений? Заранее благодарен откликнувшимся!emkub
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
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
Привычка, часто на VBscript пишу и порой ограничения того автоматом в VBA лезут, хотя WorksheetFunction конечно знаю и в данном случае Вы правы, одну итерацию пропустил надо было так [vba]
Привычка, часто на VBscript пишу и порой ограничения того автоматом в VBA лезут, хотя WorksheetFunction конечно знаю и в данном случае Вы правы, одну итерацию пропустил надо было так [vba]
Простите,, мы тут о своем с Александром заболтались.
Если вы про предложенные выше функции, то поместите это в модуль и можно мрямо с листа вызывать, как обычную встроенную, указав ячейку столбца N. Ну или делать скрипт которые перебирает нужный вам диапазон и значенеи ячеки опять как аргумент. Все от задачи зависит.
Файл с функциями листа приложил, в первом посте подправил.
emkub,
Простите,, мы тут о своем с Александром заболтались.
Если вы про предложенные выше функции, то поместите это в модуль и можно мрямо с листа вызывать, как обычную встроенную, указав ячейку столбца N. Ну или делать скрипт которые перебирает нужный вам диапазон и значенеи ячеки опять как аргумент. Все от задачи зависит.
Файл с функциями листа приложил, в первом посте подправил.bmv98rus
Function NoDoubleSpase(str As String) As String ST: If InStr(1, str, " ") <> 0 Then str = Replace(str, " ", " ") :GoTo ST NoDoubleSpase = str End Function
Function NoDoubleSpase(str As String) As String ST: If InStr(1, str, " ") <> 0 Then str = Replace(str, " ", " ") :GoTo ST NoDoubleSpase = str End Function
Да причем здесь Ваш цикл-то? Выше давно уже написано одно из нормальных решений. Я пытаюсь наглядно убедить Михаила в том, что ограниченное количеставо Реплейсов не поможет. Ну, разве что упремся в ограничения на длину текстовой строки. А цикл мы и сами в состоянии написать, вопрос не в этом был.
Да причем здесь Ваш цикл-то? Выше давно уже написано одно из нормальных решений. Я пытаюсь наглядно убедить Михаила в том, что ограниченное количеставо Реплейсов не поможет. Ну, разве что упремся в ограничения на длину текстовой строки. А цикл мы и сами в состоянии написать, вопрос не в этом был._Boroda_
Михаила убедить без аргументов сложно, а с аргументами, да еще математическими (Степени двойки + 1) - элементарно :-) . В результате можно изменив в итерации количество искомых пробелов с заменой на один, например так Space(8),4,3,2, отсрочить появление не обработанного двойного, но оно оюязательно наступит при стремлениии последовательных пробелов к бесконечности. Конечно это придуманный случай, но вопрос скорее в ограниченности подхода используемого в конкртеном случае. Александр спс за науку.[/offtop]
Михаила убедить без аргументов сложно, а с аргументами, да еще математическими (Степени двойки + 1) - элементарно :-) . В результате можно изменив в итерации количество искомых пробелов с заменой на один, например так Space(8),4,3,2, отсрочить появление не обработанного двойного, но оно оюязательно наступит при стремлениии последовательных пробелов к бесконечности. Конечно это придуманный случай, но вопрос скорее в ограниченности подхода используемого в конкртеном случае. Александр спс за науку.[/offtop]bmv98rus
Замечательный Временно просто медведь , процентов на 20.