Определение диапазона на основе смежных повторяющихся значений - PullRequest
0 голосов
/ 16 октября 2018

У меня есть сообщение, что наше программное обеспечение выкладывается, что я пытаюсь создать что-то более полезное из.В отчете перечислены все переключатели разрешений в системе, например:

JANE DOE      PERMISSION 1    N
JANE DOE      PERMISSION 2    N
JANE DOE      PERMISSION 3    Y
JOHN SMITH    PERMISSION 1    Y
JOHN SMITH    PERMISSION 2    N
JOHN SMITH    PERMISSION 3    Y

Я превращаю это в таблицу, которая использует INDEX / MATCH, чтобы проверить, находится ли переключатель на Y или N, например:

             JOHN   JANE
PERMISSION 1  Y      N
PERMISSION 2  N      N
PERMISSION 3  Y      Y

Моя проблема в том, что у нас более 100 разрешений и 200 сотрудников.Формула, которую я использую, такова:

=INDEX(toggle,MATCH(1,INDEX((B$1=employee)*($A4=permission),0,1),0))

Итак, мой INDEX / MATCH проверяет список из 20 000 значений, чтобы заполнить 20 000 различных ячеек.Неудивительно, что на это уходит довольно много времени.

Исходный отчет уже организован в алфавитном порядке, поэтому разрешения каждого сотрудника сгруппированы.Что я хотел бы сделать, так это указать моему индексу, чтобы он смотрел только на диапазон, составляющий разрешения текущего сотрудника.Так, например, у меня может быть вспомогательная строка, которая вычисляет диапазон для Джона Доу, и затем использовать INDIRECT (), чтобы указать мой индекс только на этот диапазон.

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

1 Ответ

0 голосов
/ 16 октября 2018

По моему мнению, вы можете сделать даже лучше, чем вы предлагаете ограничить диапазоны, на которые ссылается ваша текущая настройка формулы.

ЕДИНСТВЕННАЯ причина того, что вы страдаете от таких длительных времен расчета с вашей текущей настройкойЭто связано с тем, что вы используете конструкцию array-processing .Более того, этого легко избежать, и он требует использования только одного дополнительного столбца в ваших данных, а именно:

Простой, не являющийся массивом эквивалент формулы, которую вы разместили, будет выглядеть так:

=INDEX(toggle,MATCH(B$1&"|"&$A4,concat,0))

и будет намного, намного быстрее вычисляться.

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...