PDA

Показать полную графическую версию : [решено] Excel 2010 фильтр 1 и 2 листа скопировать на новый лист


Страниц : [1] 2

The Off
02-11-2012, 13:55
Всем привет! Не знаю как решить во такую задачку - на 1 и на 2 листе Информация из трех столбцов:
в первом она повторяется числовая в принципе с ней ничего не нужно делать только выносить на новую страницу со всей строкой
во втором уникальна числовая (но может совпадать в листе1 с лист2) можно считать что это ID
в третьем ФИО
Нужно отфильтровать и вывести ТОЛЬКО УНИКАЛЬНЫЕ значения только со второго листа, уникальные значения первого листа не нужны, на новую страницу фильтр нужно вести по двум параметрам ФИО и ID

Как это вообще можно сделать - я знаю но способ очень кривой, занимает много времени и повторять его нужно для 23 файлов - не хочется) в каждом от 2 тыс. записей
Подскажите как можно это реализовать ?
Заранее благодарен.

Таблица выглядит примерно так - состоит из 2-8 тысяч записей, нужно вынести "появившиеся" во втором листе записи, которых НЕТ в листе 1

Лист1
30 13245 Иванова Екатерина Ивановна
40 54660 Петрова Нина Петровна
40 22321 Иванов Иван Иванович
50 23453 Петров Петр Иванович
50 22222 Тихомиров Василий Петрович
60 13244 Ноздрева Ирина Ивановна
40 54440 Петрова Екатерина Петровна
40 33321 Иванов Сергей Иванович
50 21153 Петров Иван Петрович
50 21112 Носов Василий Петрович

Лист2

30 13245 Иванова Екатерина Ивановна
40 54660 Петрова Нина Петровна
40 88897 Павлов Александр Иванович
50 23453 Петров Петр Иванович
50 22222 Тихомиров Василий Петрович
60 13244 Ноздрева Ирина Ивановна
40 54440 Петрова Екатерина Петровна
40 33321 Иванов Сергей Иванович
50 45544 Кузьмин Иван Сергеевич
50 13009 Каряев Михаил Петрович


желаемый результат

40 88897 Павлов Александр Иванович
50 45544 Кузьмин Иван Сергеевич
50 13009 Каряев Михаил Петрович

okshef
02-11-2012, 14:14
Данные - Удалить дубликаты

The Off
02-11-2012, 14:18
Данные - Удалить дубликаты »
Так ведь это удаляет дубликаты только на текущем листе

okshef
04-11-2012, 13:34
The Off, заполните верхнюю строчку на листе 3 (например, "Номер", "ID", "ФИО") - обязательно. Добавьте модуль, вставьте в него текст
Sub findnew()
For Each c In Worksheets(2).Columns(2).Cells
If Worksheets(1).[b:b].Find(c.Value) Is Nothing Then
Worksheets(2).Range("a" & c.Row & ":c" & c.Row).Copy Worksheets(3).Range("a" & Worksheets(3).Cells.Rows.Count).End(xlUp)(2)
End If
If IsEmpty(c) Then Exit For
Next
End Sub
и запустите

Формулами решение, наверное, есть, но честно, лень искать.

Предполагалось, что ID и ФИО все-таки соответствуют друг другу.

The Off
06-11-2012, 14:52
okshef, Огромное Вам спасибо !!! Я поначалу даже и не думал о модулях !!! Теперь не придется тратить каждый месяц на это целую кучу рабочего времени

okshef
06-11-2012, 15:31
The Off, спасибо за отзыв, рад, что смог помочь, хотя не считаю себя большим спецом в Excel. Код немного поправил - удалил ненужную строчку. Функциональность не меняется, но чуть-чуть ускоряется.

The Off
06-11-2012, 15:38
okshef, ну ты быстро сообразил, как это можно реализовать, я бы только завтра догадался, что можно это с помощью модуля сделать, у меня будет еще 1 вопрос, но по access, изложу немного позже в новой теме, когда появится время

okshef, подскажи пожалуйста как добавить еще один столбец в выборку ? я просто в программировании вообще не силен...

okshef
08-11-2012, 12:11
Поточнее можно?

The Off
08-11-2012, 12:13
okshef, ну появилась необходимость делать выборку еще по одному критерию получается таблица будет состоять уже из 4 столбцов вот нужно новый четвертый добавить это можно сказать "второй ID"

okshef
08-11-2012, 12:23
Сделайте примерный файл из 10 строчек с желаемым результатом (кнопка "Прикрепить файл" справа от окна ввода сообщения).

The Off
08-11-2012, 12:41
Пример 10 строк с желаемым результатом

okshef
08-11-2012, 12:51
То есть критерий отбора останется тот же, но в результаты нужно добавить 4-й столбец? Или все-таки 4-й столбец является критерием отбора?

The Off
08-11-2012, 13:03
4-й столбец так же является критерием поиска

okshef
08-11-2012, 13:14
Простите за массу уточняющих вопросов, но наличие 2-го критерия значительно усложняет задачу.
То есть алгоритм поиска выглядит так:
1) сравнить листы по второму столбцу
2) в случае отсутствия данных перейти к четвертому столбцу
3) если данные не совпадают - перенести на лист 3
4) если данные в 4-м столбце совпадают - продолжить поиск
Так?

The Off
08-11-2012, 13:28
1) сравнить листы по второму столбцу
2) если данные не совпадают - перенести на лист 3
3) если данные в 4-м столбце совпадают - продолжить поиск

то есть 4 столбец мы смотри уже среди найденных в 1 пункте

okshef
08-11-2012, 13:58
Опять неясность: то есть перенос в любом случае осуществляется при отсутствии в списке на листе 1 только по критерию 2.если данные в 4-м столбце совпадают - продолжить поиск »он и так продолжится... Какую роль играет критерий 4?

The Off
08-11-2012, 14:19
Прошу прощения, задавал очень глупые вопросы, уже придумал решение, но теперь нужно оставить выборку как и была и на третий лист копировать только первый и третий столбцы. То есть без столбца, по которому выполнялась выборка.

okshef
08-11-2012, 14:47
Sub findnew()
For Each c In Worksheets(2).Columns(3).Cells
If Worksheets(1).[c:c].Find(c.Value) Is Nothing Then
Worksheets(2).Range("a" & c.Row).Copy Worksheets(3).Range("a" & Worksheets(3).Cells.Rows.Count).End(xlUp)(2)
Worksheets(2).Range("c" & c.Row).Copy Worksheets(3).Range("b" & Worksheets(3).Cells.Rows.Count).End(xlUp)(2)
End If
If IsEmpty(c) Then Exit For
Next
End Sub


Код поправил.

The Off
08-11-2012, 15:06
okshef, Все работает как нужно !!! СПАСИБО ОГРОМНОЕ !!!

Еще одно - нужно удалить дубликаты на получившемся списке (некоторые записи повторяются дважды во втором листе только обнаружил) как это добавить в модуль?

okshef
08-11-2012, 21:11
Добавьте после Next
Worksheets(3).UsedRange.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes




© OSzone.net 2001-2012