Страницы: 1
RSS
Одновременная фильтрация по столбцам и по строкам
 
Что делать если условием таблицы является скрытие столбцов по условию: содержание в ячейках заданного диапазона таблицы определенного значения?
Например:
Есть таблица со строками содержащими в заголовке название рыб (200 строк) и столбцами содержащими в заголовке название локаций для рыб (50 столбцов).
В таблице есть диапазон содержащий в ячейках символ Х и символ Y(либо пустая ячейка). Этот диапазон показывает в какой локации какая содержится рыба. Используя стандартный фильтр выбираю в одном из столбцов "фильтровать по значению Х"
Требуется:
Выделив все ячейки оставшегося после фильтрации диапазона (например осталось только 20 строк названий рыб и все 50 столбцов названий локаций, т.е 1000 ячеек) скрыть СТОЛБЦЫ в которых ячейки диапазона не содержат хотя бы 1 символ Х (например в результате получиться 20 строк названий рыб и всего 5 СТОЛБЦОВ названий локаций, т.е 100 ячеек)
Результат может быть как в этой же таблице либо вывод на отдельный лист.
Или при использовании стандартного фильтра сразу же скрываются не только строки, но и столбцы не содержащие условия фильтрации (условие: ячейки столбца содержат хотя бы 1 символ Х)
Изначально в каждом столбце есть хотя бы 1 символ Х. Пример таблицы во вложении

Пожалуйста помогите разобраться с этой задачкой. Излазил кучу ресурсов. В основном все повторяется одно и тоже: Использование форматирования или сортировки. Пробовал. Не получается. Транспонировать таблицу не вариант. Все сводится к написанию скрипта. Я не силен в этом деле.
Изменено: Сергей_АГ - 15.04.2018 17:31:57 (уточнил файл)
 
Добавлю уточняющий задачу файл с наглядным примеров как должно быть . См. ниже свежую версию ))
Изменено: Сергей_АГ - 15.04.2018 19:33:51
 
Предлагаю такую формулу
Код
=INDEX($C$3:$U$178;MATCH(1;INDEX(($A$3:$A$178=$W3)*($B$3:$B$178=$X3);0);0);MATCH(Y$2;$C$2:$U$2;0))
Изменено: jakim - 15.04.2018 18:03:40
 
Спасибо за беспокойство.
При фильтрации основного файла ничего не происходит.
Таблица с внесенной формулой просто скрывается (понимаю что фильтр убирает строки, поэтому соседняя таблица тоже скрывается)
Таблица во вкладке также ничего не содержит.
100% вероятность, что я не совсем понимаю как это работает.

Наверняка будет помощью следующее уточнение:
Таблиц на листе может быть 2 (вторая справа), но можно делать и на отдельных листах. На отдельных листах даже лучше будет.
Первая таблица -  Основная таблица в которой происходит фильтрация
Вторая таблица - Таблица с результатом работы фильтра по условиям задачки которая описана выше
Во второй таблице отфильтрованы и строки и столбцы

В файле наглядно показал что необходимо
Изменено: Сергей_АГ - 15.04.2018 23:31:19
 
Сергей_АГ, если лучше, чтобы каждая таблица была на своем листе, то перенесите таблицу на другой лист и выложите файл на форуме.
 
Цитата
Karataev написал:
перенесите таблицу на другой лист и выложите файл на форуме.
Спасибо за уточнение. В приложеном файле сделал как Вы просили
 
Код
Private Sub Worksheet_Calculate()
    Dim f As Filter, i&
    If Me.AutoFilterMode Then
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        For Each f In Me.AutoFilter.Filters
            If f.On Then
                For i = Me.AutoFilter.Range.Columns.Count - Me.AutoFilter.Range.Column + 1 To Me.AutoFilter.Range.Column + 2 Step -1
                    If Application.WorksheetFunction.Subtotal(103, Me.AutoFilter.Range.Offset(1).Columns(i - Me.AutoFilter.Range.Column + 1)) = 0 Then
                        Me.Columns(i).Hidden = True
                    End If
                Next
                Application.EnableEvents = True
                Application.ScreenUpdating = True
                Exit Sub
            End If
        Next
        Me.Columns.Hidden = False
    End If
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Изменено: RAN - 15.04.2018 21:46:32
 
RAN, ОГРОМНОЕ спасибо за труд!
Подскажите, что требуется сделать для того, чтобы это правило действовало и на другие листы в книге, с другим диапазоном ?
 
Да ничего особенного
Установить фильтр, вставить на лист формулу =СЕГОДНЯ(), и скопировать код в модуль нужного листа.
 
RAN, Побеспокою еще немного.
Стал пробовать пользоваться таблицей и столкнулся вот с какой проблемой
1. Таблица не раскрывается полностью, не могу отменить фильтрацию заданную Вами
2. Поясните где находится модуль листа? Мне реально стыдно, но я наверно от волнения отупел совсем
 
Цитата
Сергей_АГ написал:
Поясните где находится модуль листа? Мне реально стыдно, но я наверно от волнения отупел совсем
А волноваться и тупить зачем? )) Идём в раздел "приемы" и читаем эту статью.
P.S. В "приемах" вообще можно найти много полезного.
 
Цитата
Юрий М написал:
Идём в раздел "приемы" и читаем
Спасибо огромное. Очень полезная ссыль.. Получил настоящее удовольствие от изучения, да еще и канал YouTube нашел. Однозначно респект!!!

Единственно непонятно, что имел ввиду RAN, когда говорил про фильтр.
Поясню как я понял:
1.В нужной таблице устанавливаем стандартный фильтр сортировки по строкам
2. В любом месте листа выделяем ячейку и пишем в ней функцию =СЕГОДНЯ()
3. Находим модуль листа и копируем туда код предложенный RAN
После этих манипуляций таблица на которой я установил фильтр будет убирать строки и столбцы по условию которое обсуждаем здесь.
Верно ли я понимаю?
И еще один нюансик.
В представленом RAN варианте не сбрасывается фильтр установленный RAN (таблица "Рыбалка образец" получается усечённой)
В чем может быть проблема?
Спасибо за помощь.
Изменено: Сергей_АГ - 16.04.2018 12:19:57
Страницы: 1
Наверх