Фильтрация в Excel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Alex1990
Сообщения: 5
Зарегистрирован: 18 июл 2009, 21:12

Мне надо купить квартиру, имеется газета в xls формате и телефоны агенств. Квартиру хочу покупать не через агенство, так вот мне из этой электронной газеты надо исключить телефонные номера агенств, что б у меня остались одни хозяева, как мне это сделать? То есть мне надо фильтр по нескольким значением (номеров агенств около 100)
За ранее спасибо!
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Сначала нужно нормализовать телефонные номера.
Затем:
Телефоны агенств помещаете по одному на ячейку в колонку A на соседнем листе
На вашем рабочем листе с данными добавляете колонку с формулой вида
=ЕСЛИ(ЕНД(ПОИСКПОЗ(АДРЕС_ЯЧЕЙКИ_С_ПРОВЕРЯЕМЫМ_ТЕЛЕФОНОМ;ЛИСТ_АГЕНТСТВ!A:A;0));1;0)
Останется только отфильтровать, например, автофильтром по колонке с формулой и значению 1
Андрей Энтелис,
aentelis.livejournal.com
Alex1990
Сообщения: 5
Зарегистрирован: 18 июл 2009, 21:12

Как можно нормализовать телефонные номера. и что это такое?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Теоретически телефонный номер в объявлении может быть представлен по разному:
123456
12-34-56
(495)123-456
12 34 56
и т п
По всей видимости вам придётся привести эти номера к одному представлению
это и есть нормализация. Как она делается конкретно - зависит от ваших данных и их структуры...
Рекомендую вам выложить здесь образец файла с объявлениями и списком номеров агентств - тогда можно будет что то более конкретное посоветовать
Андрей Энтелис,
aentelis.livejournal.com
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Образец файла есть здесь: http://www.programmersforum.ru/showthread.php?t=58057
Вот только без отдельного списка телефонов агенств.
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Андрей Энтелис,
aentelis.livejournal.com
Alex1990
Сообщения: 5
Зарегистрирован: 18 июл 2009, 21:12

В газете номера вида 123456. В листике что я прилагаю, тоже в таком виде.
Вложения
Номера агенств.zip
(2.6 КБ) 43 скачивания
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Alex1990, я ответил вам в #6 посте.Там ссылка на соседний форум.
Я привожу там решение ввобще не требующее предварительного списка номеров.
Но если вы всё же решите фильтровать и по списку, примените к выделенным
номерам способ из поста #2 ...
Андрей Энтелис,
aentelis.livejournal.com
Alex1990
Сообщения: 5
Зарегистрирован: 18 июл 2009, 21:12

Aent, решил действовать пос пособу описанному в 6 посту, в принцепи всё получилось, но мне не понятно как устанавливается автофильтр, скрывающий объявления с числом повторений номера больше 2 или не имеющие номеров телефонов.?? Объясните пожалуйста!
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Alex1990, исходный код макроса доступен в рабочей книге по Alt-F11
Интересующий вас момент там был откомментирован. Но если хотите более подробно - пожалуйста.

Код: Выделить всё

   [color=DarkGreen] ' ....[/color]
    [color=Green]' К этому моменту в колонках 3..m уже сформированы выделенные номера телефонов.
    ' Устанавливаем ранг r для заполненной телефонами области[/color]

    [color=Navy]Set[/color] r = [color=Navy]Range[/color]([color=Navy]Cells[/color](1, 3), [color=Navy]Cells[/color](iLast, m))

    [color=Navy]For[/color] i = 1 [color=Navy]To[/color] iLast  [color=Green]'цикл по объявлениям[/color]
         l = 1               [color=Green]'максимальное число повторений[/color]
         [color=Navy]For[/color] j = 3 [color=Navy]To[/color] m  [color=Green]'цикл по номерам объявления [/color]
              [color=Navy]If Len[/color]([color=Navy]Cells[/color](i, j)) > 0 [color=Navy]Then[/color] [color=Green]' ячейка не пустая ?[/color]
                   [color=Green]'да, применяем к ячейке и рангу r функцию СЧЁТЕСЛИ, подсчитывая количество [/color]
                   [color=Green]'повторений в ранге r номера из ячейки (i,j)[/color]
                   k = [color=Navy]CLng[/color]([color=Navy]Application.WorksheetFunction.CountIf[/color](r, [color=Navy]Cells[/color](i, j)))
                   [color=Navy]If[/color] k > l [color=Navy]Then[/color] l = k [color=Green]' если этот номер больше максимального количества
                                             ' повторений для строки, корректируем последнее[/color]
              [color=Navy]End If[/color]
            [color=Navy]  Cells[/color](i, 2) = l              [color=DarkGreen]' и заносим его во 2-й столбец[/color]
        [color=Navy] Next[/color] j
        [color=Navy] Application.StatusBar[/color] = [I]"Считаем повторения: "[/I] & [color=Navy]CStr[/color]([color=Navy]Int[/color](i * 100 / iLast)) & [I]"%"[/I]
    [color=Navy]Next[/color] i

    [color=Green]' Выбираем объявления с количеством максимально повторяющихся номеров до 2
    ' Устанавливаем автофильтр.[/color]
    [color=Navy]With[/color] [A1]
        [color=Navy].AutoFilter Field[/color]:=2, [color=Navy]Criteria1[/color]:=[I]"<=2"[/I]  [color=Green]'для колонки B:B (2) выбираем значения не превосходящие 2.[/color]
        [color=Green]' Если хотите выбрать единичные, то напишите Criterial1:="=1"  [/color]
        .[color=Navy]AutoFilter Field[/color]:=3, [color=Navy]Criteria1[/color]:=[I]"<>"[/I]   [color=DarkGreen]'прячем строки без телефонов[/color]
       [color=Green]' Если телефонов нет, то в 3-й колонке пусто - устанавливаем для неё автофильтр [/color]
    [color=Navy]End With[/color]
    [color=DarkGreen]' ....[/color]
Естественно, что после работы макроса можно установить любое условие в автофильтре
вручную.
Андрей Энтелис,
aentelis.livejournal.com
Ответить