Определение необходимости VBA в Excel, или может быть достаточно сводной диаграммы / таблицы - PullRequest
0 голосов
/ 25 января 2011

Хотелось бы, чтобы у меня был более точный описательный заголовок для этого вопроса, но я не очень хорошо разбираюсь в электронных таблицах Excel или VBA (я в основном разработчик Java и не играю в мире Microsoft).

Я пытаюсь использовать электронную таблицу Excel, чтобы чего-то добиться. Мне нужно определить, смогу ли я попасть туда с помощью сводной таблицы, сводной диаграммы или какой-либо другой встроенной функциональности ... или мне нужно пойти по пути написания собственного кода VBA (или, возможно, использовать другую платформу в целом). *

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

Моя таблица выглядит следующим образом:

Первая вкладка

Один столбец ... список имен, представляющих список членов.

Вторая вкладка

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

Третья вкладка (может быть, несколько вкладок?)

Вот смысл всего этого. Для каждой из возможных ролей собрания я хотел бы видеть, какие члены являются наиболее «просроченными» для этой роли. По сути, я хочу получить список всех членов клуба, отсортированный по порядку того, сколько времени прошло с тех пор, как они в последний раз исполняли эту роль. Люди, у которых никогда не служили в этой роли, будут отсортированы вверху списка.

Являются ли данные третьей вкладки чем-то, что может быть выполнено с помощью сводной таблицы и т. Д. ... или я неправильно понимаю цели и ограничения этих инструментов?

Ответы [ 2 ]

1 голос
/ 26 января 2011

Я нашел способ сделать это с помощью сводных таблиц - по одной на роль. Это немного сомнительно, стоит ли вам это делать, но зависит от того, сколько у вас действительно ролей. Я сделал это, используя 2 в качестве образца, вот суть:

  • У вас есть (Excel) таблица, содержащая имена
  • У вас есть таблица (Excel), содержащая дату собрания, RoleA, RoleB ... (я использовал Председателя и Секретаря в качестве номинальных примеров), в этих ячейках указывается имя человека, исполняющего эту роль

Затем вы создаете сводную таблицу для каждой роли (Вставка -> Сводная таблица). Используемые поля: метки строк - какую роль вы анализируете; Ценности - Дата встречи

Затем вы меняете тип результата, перейдя в Настройки поля, и измените его на Минимальный. Обратите внимание, что только люди, которые имели эту роль, будут отображаться здесь.

Повторите это для каждой роли.

Вернитесь к своей таблице имен и добавьте столбец для каждой роли, чтобы показать, когда они последний раз занимали эту роль. Формула для этого довольно громоздкая:

=IFERROR(GETPIVOTDATA("Meeting Date",Chair!$A$3,"Chair",People[[#This Row],[Name]]),0)

GETPIVOTDATA выдаст ошибку, если у них не было этой роли, поэтому я заменяю ошибки на 0 (произвольно малое число)

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

=OFFSET(People[[#Headers],[Name]],MATCH(MIN(People[LastChair]),People[LastChair],0),0)

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

Надеюсь, что это имеет некоторое подобие смысла, спросите, если есть вопросы

0 голосов
/ 26 января 2011

Мой первый инстинкт - переместить вас в Access, где вы можете выполнять SQL-запросы к своему сердцу, но я уверен, что это можно сделать в Access без какой-либо пользовательской кодировки.

  1. Сводные таблицы могут работать, но я избегаю их по нескольким причинам (трудно описать обычным пользователям, не обновляет автоматически, трудно форматировать и т. д.), поэтому здесь есть кое-что, использующее только встроенные в Excel функции ячеек.
  2. Проверкаout vlookup () и countif () on http://www.techonthenet.com/excel/formulas/index.php. (встроенные файлы справки тоже работают. Мне просто нравится этот сайт больше)
  3. На изображении ниже я смоделировал ваши Tab2 и Tab3 . Tab2 - это чисто данные без уравнений. Vlookup () требует , чтобы эта таблица была отсортирована по дате убывания и с крайним правым столбцом даты.
  4. Tab3 считает обаКоличество раз, когда каждый служил на этой должности, и когда они последний раз работали на этой должности.
  5. Формула в ячейке C13: =COUNTIF($B3:$B8,$B13).то есть он подсчитывает количество раз, когда "Abe" появляется в столбце "Председатель" в Tab2.
  6. Формула в ячейке D13 - =IF(C13>0,VLOOKUP($B13,$B$2:$D$8,3,FALSE),"-").т. е. если этот человек когда-либо служил в этой роли, то он находит самую последнюю дату.
  7. Формулы для обеспечения безопасности почти совпадают.Столбец «Последнее обслуживание» теперь =IF(E13>0,VLOOKUP($B13,$C$2:$D$8,2,FALSE),"-").Здесь необходимо переименовать диапазоны, чтобы удовлетворить потребности функции Vlookup (здесь очень удобен SQL-запрос, но Excel этого не позволяет)
  8. Трудно определить,кто-то «запоздал», потому что некоторые люди будут утверждать, что «Last Served» важнее, чем «# Times Served», а другие утверждают, что все наоборот.Я предлагаю посмотреть на обе колонки и просто обсудить это.Sample Image
...