Страницы: 1
RSS
Фильтр с учетом объединенных ячеек
 
Добрый день всем присутствующим :)

Есть задача (мне кажется не выполнимая), в таблице при применении обычного фильтра выводятся ВСЕ строки которые содержат данное значение, но нужно сделать так чтобы при применении фильтра выводились не только строки имеющие данное значение но и так сказать виртуально объединенные между собой строки,

т.е. в данной таблице к каждому сотруднику присвоено 6 строк, и так называемая карточка сотрудника состоит из 6 строк, но при применении фильтра выводится только одна строка и остальная информация о сотруднике обрубается, но нужно чтоб выводилась все строки по каждому сотрдунику по которому есть совпадения в том или ином столбце.

Не уверен что смог все понятно объяснить, поэтому прилагаю картинки:
Исходная таблица:

Вот как выглядит таблица если применить стандартный фильтр (сортирую по столбцу ВУЗ - значение ТЕХНИКУМ) тут мы видим что при применении фильтра уже нельзя увидеть информацию о работе сотрудника (их минимум 3, в данном примере они обозначены как ПЕРВАЯ, ВТОРАЯ, ТРЕТЬЯ)

Вот как хочу чтобы работало - при сортировке по значению ВУЗ - техникум, все сотрудники и полные их карточки (6 строк относящихся к этому сотруднику) будут отображаться полностью.


Также прилагаю исходник таблицы. Очень надеюсь что с вашей помощью получится решить задачу :) Заранее всем большое спасибо.
Изменено: staudio - 19.01.2018 15:35:44
 
Есть способ тупой и неправильный, но быстрый и понятный. В ячейках, где сотрудник, заполняете все строки (все 6 строк), одинаковыми значениями (ФИО). Одно из этих значений оставляете автоматическим цветом отображать, а у остальных меняете цвет шрифта на цвет фона.

А в целом, как говорили классики - объединенные ячейки = ЗЛО.
Изменено: Пытливый - 19.01.2018 15:15:42
Кому решение нужно - тот пример и рисует.
 
Цитата
Пытливый написал:
В ячейках, где сотрудник, заполняете все строки (все 6 строк), одинаковыми значениями (ФИО)
Но такой способ работает только если я буду фильтровать по тем столбцам где все 6 строк заполнены таким образом, это подходит для столбцов ФИО и тд, но там еще куча столбцов где в каждой строке будут разные значения, например вуз, место работы и тд по которым как раз и будут производиться фильтры
 
Ну, тогда, имхо, только менять порядок расположения данных - одна строка - одна запись. А уж потом сортировать, отбирать и через сводные и прочие отчеты выводить в каком хошь виде.
Кому решение нужно - тот пример и рисует.
 
staudio,
Цитата
Пытливый написал:
только менять порядок расположения данных - одна строка - одна запись
что-то вроде этого - в файле

А вообще умные таблицы, справочники, базы — связать всё и радоваться беспечному и точному учёту
Изменено: Jack Famous - 19.01.2018 15:54:58
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
что-то вроде этого - в файле
В каком файле ? у вас во вложении тот же самый что и я скинул

Цитата
Jack Famous написал:
А вообще умные таблицы, справочники, базы
Да согласен с вами, но в данной задаче важна наглядность и простота чтоб в одном месте было все видно, и именно excel. Можно конечно на дельфи написать программку в связке с access или sql но это уже другая совсем история и время конечно же )
Изменено: staudio - 19.01.2018 16:02:06
 
staudio, не пересохранил. Заменил
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
staudio написал:
что-то вроде этого - в файле
Таблицу посмотрел, да это вариант схож с тем что предлагал Пытливый, но думаю сотрудников это не устроит. Думаю видимо возможности Excel в данном случае не оставляют другого выбора кроме как искать решение в других ПО либо писать свое (( эххх
 
Цитата
staudio написал:
думаю сотрудников это не устроит
А если так?  :)  
 
Цитата
_Igor_61 написал:
А если так?    
Это то что нужно !!! Спасибо большое Вам!!
Только вот разобраться бы теперь как это работает ) Потому что у некоторых сотрудников может быть больше 5 строк и т.д.
 
Цитата
staudio написал:
у некоторых сотрудников может быть больше 5 строк и т.д.
А сразу об этом нельзя было сказать?  Даже немного страшно от  
Цитата
"и т.д."
Проверяйте:
 
Вариант
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lr&, i&
    If Target.Address <> "$F$2" Then Exit Sub
    Application.ScreenUpdating = False
    Rows.Hidden = False
    lr = Cells(Rows.Count, 1).End(xlUp).Row
    lr = lr + Cells(lr, 1).MergeArea.Rows.Count - 1
    If Cells(2, 6).Value = "В С Е" Then Exit Sub
    Rows("4:" & lr).Hidden = True
    For i = 4 To lr
        If Cells(i, 7) = Cells(2, 6) Then
            Range("A" & i).MergeArea.EntireRow.Hidden = False
        End If
    Next
End Sub
 
Блин, сбил я всех с толку своим вариантом  :) . В теме-то:
Цитата
Задача после применения фильтра
Но у меня это не получилось: почему-то Excel не хочет одни и те же строки скрывать фильтром и одновременно их же отображать   8-0  
 
Можно и фильтром
Код
Private Sub Worksheet_Calculate()
    Dim r As Range, ar As Range, sRows As Range
    Dim dic As Object, adic, i&
    With ActiveSheet
        If .AutoFilterMode Then
            If .AutoFilter.Filters(7).On Then
                Application.ScreenUpdating = False
                Application.EnableEvents = False

                Set dic = CreateObject("Scripting.Dictionary")
                Set r = .AutoFilter.Range.SpecialCells(xlCellTypeVisible)
                For Each ar In r.Areas
                    For Each sRows In ar.Rows
                        dic.Item(sRows.Row) = 1
                    Next
                Next
                .AutoFilter.Range.AutoFilter Field:=7, Criteria1:="@"
                adic = dic.keys
                For i = LBound(adic) To UBound(adic)
                    Range("A" & adic(i)).MergeArea.EntireRow.Hidden = False
                Next
                Application.EnableEvents = True
                Application.ScreenUpdating = True
            End If
        End If
    End With
End Sub


+ =СЕГОДНЯ()
Изменено: RAN - 21.01.2018 13:58:31
 
RAN, Вы как всегда на высоте! Спасибо за мастер-класс!  
 
Отличные новости и подъем настроения с утра в понедельник )))) Второй вариант _Igor_61 то что нужно, но версия с фильтром от  RAN более подходит за счет того что не придется создавать дополнительные ячейки для фильтра. Проверил добавление или удаление строк в "карточках" сотрудников, фильтр все учитывает :) Но единственный момент - прошу подсказать как данный скрипт пивязать к каждому столбцу, идея такова чтобы фильтровать можно было по любому столбцу. Заранее спасибо :)
Изменено: staudio - 22.01.2018 09:18:51
 
При применении фильтров к нескольким столбцам, результаты могут отличаться от ожидаемых.
Код
Private Sub Worksheet_Calculate()
    Dim r As Range, ar As Range, sRows As Range
    Dim dic As Object, adic, i&, fi&
    With ActiveSheet
        If .AutoFilterMode Then
        For i = 1 To .AutoFilter.Filters.Count
             If .AutoFilter.Filters(i).On Then fi = i
            Next
            If fi Then
                Application.ScreenUpdating = False
                Application.EnableEvents = False

                Set dic = CreateObject("Scripting.Dictionary")
                Set r = .AutoFilter.Range.SpecialCells(xlCellTypeVisible)
                For Each ar In r.Areas
                    For Each sRows In ar.Rows
                        dic.Item(sRows.Row) = 1
                    Next
                Next
                .AutoFilter.Range.AutoFilter Field:=fi, Criteria1:="@"
                adic = dic.keys
                For i = LBound(adic) To UBound(adic)
                    Range("A" & adic(i)).MergeArea.EntireRow.Hidden = False
                Next
                Application.EnableEvents = True
                Application.ScreenUpdating = True
            End If
        End If
    End With
End Sub
Изменено: RAN - 22.01.2018 09:50:14
 
RAN, спасибо, обновление попробовал сразу по нескольким фильтр поставить (город и место учебы) отфильтровал корректно, единственный момент после того как фильтр применяешь то галочка которую поставил пропадает, например на значение "школа" поставил - карточки сотрудников отобразились нужные, но галочка снялась со значение "школа" и в итоге если по другим столбцам потом фильтры выставлять то в один момент все пропадает - пока назад не вернешся и галочки пропавшие не поставишь )) Как нибудь возможно решить ?
Изменено: staudio - 22.01.2018 11:27:09
 
нет
PS Модераторам
Предлагаю название "фильтр с учетом объединенных ячеек"
Изменено: RAN - 22.01.2018 20:42:55
 
RAN, благодарю за помощь, с радостью принимаем файл в работу :)

Вопрос решен.  ;)
Страницы: 1
Наверх