2014-07-23 1 views
1

ВведениеИмейте VBA для уникальных элементов в многоколоночном диапазоне, как фильтровать несколько строк по предыдущим результатам?

Я пытаюсь улучшить базовый лист планирования (см ниже) с дополнительной сортировкой.

enter image description here

В первом столбце перечислены ресурсы. Каждая неделя имеет 2 столбца, представляющих 20 часов за столбец.

Пример считывания;

  • В неделю 30 Арон работает 40h по проекту А. В неделю 31 он работает 20h по проекту А и 20h по проекту В.
  • Джефф не работает в WK30 и работает 40 по проекту C в WK31

Моя цель

  1. Создать уникальный список проектов, над недели
  2. Уметь для фильтрации по имени проекта и получения только строк ресурсов, работающих над этим проектом. (Нет особой необходимости не отфильтровать другие проекты, в том же ряду. Так что, если отфильтровать по проекту «А», я хочу видеть только ряды Арона и Dave)

То, что я

в основном элемент 1 покрыт следующим образом:

2-й столбец (проекты) представляет собой массив-формула генерируется с помощью функции VBA (взято из here), который возвращает все уникальные элементы в несколько диапазоне столбца. Формула ячейки выглядит так, где второй аргумент UniqueItems() определяет, вернем ли мы только число уникальных элементов (TRUE) или список всех уникальных значений (FALSE).

=TRANSPOSE(UniqueItems($C$4:$H$6,FALSE)) 

Чего не хватает

пункта 2 моего списка цели отсутствует. Если я в настоящее время выбрать вариант фильтра для проектов (см скриншот) enter image description here

и фильтр по проекту А, то я получаю только строка 5 и также не грести 4. enter image description here

Как бы идти о фильтрации это правильно?

Код VBA разрешен или указатели, к которым я должен использовать регулярные формулы. Совершенно другое решение с теми же результатами также отлично. Я думал о сводных таблицах, но я думаю, что он не может обрабатывать пустые ячейки вокруг диапазона, который является общим, если нет работы для этого ресурса.

лист используется можно загрузить from here

+1

Что касается простой функции VBA, которая могла бы объединить все проекты из столбца C в, скажем, в столбце B, с разделителем между каждым проектом, тогда вы можете отфильтровать столбец B с помощью критериев «Содержит»? Имеет ли это смысл? –

+0

Я вижу, что вы имеете в виду, и работает конкатенация. Однако теперь мне всегда приходится выбирать «фильтр столбцов (треугольник вниз в заголовке столбца) ->« Текстовые фильтры -> содержит », а затем заполнять критерии. Я бы предпочел иметь несколько меньше кликов, если вы понимаете, что я имею в виду. – ixje

ответ

1

ИМХО, вам будет гораздо лучше создавать рабочий лист, служащий в качестве нормализованной таблицы базы данных с одной строки на следующие колонки: человек, неделю, проект. Наконец, последний столбец для количества часов (и, необязательно, стоимость тех часов, которые были настроены для каждого работника по мере необходимости)

Затем используйте сводную таблицу для создания просмотренного вами вида (или любого другого представления отчетов, которое вам нужно).

Это позволит вам создать несколько сводных таблиц, которые легко отвечают на такие вопросы, как: Сколько часов запланировано для всего проекта X? на определенную дату? Сколько всего часов запланировано для каждого работника в течение периода времени - кто больше/меньше используется?
Сколько часов запланировано для каждого работника за проект? и т. Д.

Сохранение данных отдельно от отчетов является более безопасным и более модульным - я бы не хотел, чтобы ошибка VBA имела возможность развращения/удаления необработанных данных.

Смежные вопросы