Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2009, 09:05   #1
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию Количество знаков

Добрый день!

Помогите пожалуйста с решением проблемы, а именно имеется столбец с телефонами, в котором встречаются как сотовые номера (написанные через тире [8-9**-***-**-**] или же пробел [8 9** *** ** **], встречаются так же и такие варианты [9*********], [8(9**)*******] и тд.) так и домашние (с кодом и без). Цель получить столбец содержаший только сотовые номера.

Учитывая разношёртность написания номеров, решение мне представляется только в виде макроса, который выведит те яцейки кол-во знаков в которых больше, например 8.

Или же, если это возможно, сначала исключить (макросом) все знаки не являющиеся цифрами, ну а потом применить фильтр по кол-ву знаков в ячейке. (В таком случаи точность будет намного выше).
Flangini вне форума Ответить с цитированием
Старый 02.07.2009, 09:47   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно, например, с помощью функции:
Код:
Function Ntel(Cell As Range) As String
    Dim i As Integer, s As String
    For i = 1 To Len(Cell)
        s = Mid(Cell, i, 1)
        If Asc(s) > 47 And Asc(s) < 58 Then Ntel = Ntel & s
    Next
    Ntel = IIf(Len(Ntel) > 8, Ntel, "")
End Function
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.07.2009, 11:11   #3
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Можно, например, с помощью функции:
Код:
Function Ntel(Cell As Range) As String
    Dim i As Integer, s As String
    For i = 1 To Len(Cell)
        s = Mid(Cell, i, 1)
        If Asc(s) > 47 And Asc(s) < 58 Then Ntel = Ntel & s
    Next
    Ntel = IIf(Len(Ntel) > 8, Ntel, "")
End Function
Никак не могу вызвать функцию никогда этого сам не писал, стал пробовать не получается.
Что не так:
Код:
Private Sub Start()
Dim Tax As Range
Tax = Ntel("E3:E100")
End Sub

Последний раз редактировалось Flangini; 02.07.2009 в 11:13. Причина: Дописать
Flangini вне форума Ответить с цитированием
Старый 02.07.2009, 11:25   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

я вот такое написал правее ячейки с номером и получил последние 7 цифр:
Код:
=ПРАВСИМВ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(RC[-1];"-";"");" ";"");"(";"");")";"");7)
а функцию написанную SAS888, использовать надо так:
1. вставляете код функции в модуль
2. набираете в ячейке равно "="
3. жмете fx (значок чуть левее строки ввода формул)
4. строке "категория" выбираете определенные пользователем
5. в списке функций выбираете Ntel
6. в качестве параметра указываете ячейку с данными, жмете Enter. (Понятно, там по синтаксису скобки открыть-закрыть)
7. копируете ячейку вниз по списку телефонов
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.07.2009, 11:51   #5
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Спасибо большое!
а функцию написанную SAS888, можно использовать только так?
то что я пытался сделать - бред сумашедшего?
Flangini вне форума Ответить с цитированием
Старый 02.07.2009, 12:26   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

функция SAS888, как и то что я написал используются аналогично. Пишем ее в одну ячейку, а потом размножаем но всему списку.
Только моя удалит из начальной строки пробелы " ", тире "-", открывающуюсю "(" и закрывающуюсю ")" скобки, а SAS888 во-первых, запись компактнее, во-вторых, удаляет из начальной строки все, кроме цифр. Правда, с оператором Ntel = IIf(Len(Ntel) > 8, Ntel, "") я не согласен, я не стал бы возвращать пусто если в номере меньше 8 цифр...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.07.2009, 12:39   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите пример во вложении.
Цитата:
я не согласен, я не стал бы возвращать пусто если в номере меньше 8 цифр...
Вообще-то, это пожелание автора темы.
Вложения
Тип файла: rar Книга1.rar (5.7 Кб, 11 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.07.2009, 13:50   #8
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
с оператором Ntel = IIf(Len(Ntel) > 8, Ntel, "") я не согласен, я не стал бы возвращать пусто если в номере меньше 8 цифр...
Предлагаете ставить флаг?

Скажите, что означает Len(Cell) в цикле For.
Эта строка мне тоже не понятна: s = Mid(Cell, i, 1)
И это объясните пожалуйста: Ntel = Ntel & s
Flangini вне форума Ответить с цитированием
Старый 02.07.2009, 14:51   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Len(Cell) - Количество символов в значениии ячейки Cell
s = Mid(Cell, i, 1) - Присваиваем переменной s значение из Cell, начиная с i-го символа в количестве 1. Т.е. перебираем все символы в ячейке Cell по 1.
Ntel = Ntel & s - Переменной Ntel присваиваем значение переменной Ntel, сцепленное со значением переменной s.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.07.2009, 15:22   #10
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Спасибо! Теперь на йоту стал умней
Flangini вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пощитать количество знаков в RichEdit Vladya Помощь студентам 3 05.03.2009 17:08
количество цифр и количество символов до первой гласной буквы 111111 Общие вопросы C/C++ 2 22.12.2008 12:15
(+,-,*,/)Расстановка знаков МаксимNEWProgramm Паскаль, Turbo Pascal, PascalABC.NET 5 17.04.2008 17:04
Подсчет знаков Dizman Помощь студентам 4 31.01.2008 22:27