Формула массива Excel для многомерных промежуточных массивов - PullRequest
1 голос
/ 11 февраля 2020

У меня есть следующие данные

enter image description here

Чего я хочу добиться, так это промежуточных массивов

enter image description here

т.е. для JohnProject есть две записи A и C. Для проекта А во 2-й таблице есть два тега 10 и 6, а для проекта C - три тега 22,9,7. Я хочу получить их как промежуточные массивы в формуле большего массива.

С формулой массива

=UNIQUE(IF({"D"}=D2:D9,ROW(D2:D9)))

Я могу достичь более близкого результата для JuliaProject D и 4,8, но для любого другого, у которого есть два проекта, это не работает.

=UNIQUE(IF({"A","C"}=D2:D9,ROW(D2:D9)))

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

РЕДАКТИРОВАТЬ: Сложная версия моей проблемы.

Хорошо для большой проблемы. Это немного сложно объяснить. Но я могу попробовать. У меня есть таблица сопоставления, таблица истинности и входные данные. Я хочу выяснить, могут ли входные данные отображаться с использованием таблицы истинности и таблицы сопоставления. Так что это своего рода отображение, которое я хочу достичь в конце. Сама таблица сопоставления - это множество, где один проект может иметь несколько тегов, а один тег может быть связан с несколькими проектами, но в нем нет Person. Чисто проекты и теги. В таблице истинности есть Персона и Проекты, но нет тегов. Я хочу нанести на карту От Уникального человека к Метке. Я могу легко получить все проекты, связанные с одним человеком (в формуле массива в качестве промежуточного массива), и теперь для каждого проекта, который я получаю в массиве, я хочу найти все теги и объединить их в один массив. Проблема заключается во взаимосвязи «многие-многие» в таблице сопоставления, поскольку она возвращает многомерный массив, в результате чего получается не одно измерение. Я хочу получить массив (промежуточный в формуле массива), чтобы, наконец, найти заявленный тег в этом списке. Я надеюсь, что это имеет смысл.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Следующая формула отобразит «Результат массива без значений ошибок», нажав выделенную формулу в строке формул нажатием клавиши F9

1] Результат массива «Проект», в формуле H2 скопирована вниз :

=INDEX(B$2:B$6,N(IF(1,AGGREGATE(15,6,ROW(B$1:B$5)/($A$2:$A$6=G2),ROW(INDIRECT("1:"&COUNTIF(A$2:A$6,G2)))))))

2] Результат массива "Tag" в формуле I2 скопирован:

=INDEX(E$2:E$9,N(IF(1,AGGREGATE(15,6,ROW(E$1:E$8)/ISNUMBER(MATCH(D$2:D$9,IF(A$2:A$6=G2,B$2:B$6),0)),ROW(INDIRECT("1:"&COUNT(MATCH(D$2:D$9,IF(A$2:A$6=G2,B$2:B$6),0))))))))

enter image description here

0 голосов
/ 11 февраля 2020

Следующая формула массива может использоваться для объединения USER с TAG:

{=AGGREGATE(15,6,INDEX($E$2:$E$9,N(IF(MMULT(--IFERROR(TRANSPOSE(INDEX($B$2:$B$6,N(IF($G2=$A$2:$A$6,ROW($B$2:$B$6)))-1))=$D$2:$D$9,FALSE),ROW($B$2:$B$6)^0),ROW($D$2:$D$9)))-1),COLUMNS($G$2:G2))}

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

Формула «очистки»:

{=INDEX($E$2:$E$9,N(IF(MMULT(--IFERROR(TRANSPOSE(INDEX($B$2:$B$6,N(IF($G2=$A$2:$A$6,ROW($B$2:$B$6)))-1))=$D$2:$D$9,FALSE),ROW($B$2:$B$6)^0),ROW($D$2:$D$9)))-1)}

enter image description here

...