Вернуть уникальные заголовки столбцов, соответствующие критериям - PullRequest
0 голосов
/ 13 сентября 2018

Рассмотрим следующие данные ниже:

| 1st | 2nd | A | B | C | D | E | F | G | H |
|-----|-----|---|---|---|---|---|---|---|---|
| y   | x   |   |   | 1 |   |   |   |   |   |
| y   | x   |   |   | 1 |   |   |   |   |   |
| y   | x   |   |   |   | 1 |   |   |   |   |
|     | x   | 1 |   |   |   |   |   |   |   |
| y   |     | 1 | 1 | 1 |   |   |   |   |   |
| y   | x   |   |   |   |   |   | 1 |   |   |
| y   |     |   |   |   |   |   |   | 1 |   |
|     | x   |   |   |   |   | 1 |   |   |   |
|     | x   |   |   |   |   |   |   |   | 1 |
| y   | x   |   |   |   |   |   |   |   | 1 |

Что я хочу сделать, это вернуть все заголовки столбцов (от A до H), которые удовлетворяют следующему условию: оно должно иметь значение 1, равноеоба выровнены по значениям y и x из первых двух столбцов.

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

{=INDEX($C$1:$J$1,SMALL(IF(($A$2:$A$11="y")*($B$2:$B$11="x")*($C$2:$J$11=1),COLUMN($C$1:$J$1)-COLUMN($B$1)),ROW(1:1)))}

Однако, в то время как я перетаскиваю это, он возвращает two C values and one for D, F and H.

Это потому, что под заголовком C есть две единицы, которые удовлетворяют указанному условию.Я хочу вернуть уникальные значения, поэтому C должен быть возвращен только один раз.Я пытался использовать MATCH и дополнительные COUNTIF вместо функции SMALL, но он возвращает ошибку, и функция «Формула оценки» в Excel не помогает.Ниже, если ошибочная формула, с которой я экспериментировал:

{=INDEX($C$1:$J$1,MATCH(0,IF(($A$2:$A$11="y")*($B$2:$B$11="x")*($C$2:$J$11=1),COUNTIF($N$1:N1,COLUMN($C$1:$J$1)-COLUMN($B$1))),0))}

Обходное решение, которое я сейчас делаю, - сделать мою первую формулу «столбцом-помощником», а затем создать другую формулу на основе результата первой формулы, чтобы получить толькоуникальные ценности.Тем не менее, формула двойного массива сильно влияет на эффективность вычислений Excel из-за огромного объема данных, с которыми я имею дело.

Любая помощь / предложения подойдут, пожалуйста (без VBA, пожалуйста, так как яповерьте, здесь это не нужно) .Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Вставить вспомогательный ряд.Я сделал это прямо под вашей строкой заголовка перед вашими данными.В этой строке вы проверяете, есть ли 1, совпадающее с x и y.Я предположил, что это не пусто, но если его конкретные значения меняют формулу с <> "" на = "y" или = 134 в зависимости от обстоятельств.Поместите следующую формулу под заголовком вашего первого столбца, который вас интересует, и скопируйте справа.

=--(0<SUMPRODUCT(($B$3:$B$12<>"")*($C$3:$C$12<>"")*(D3:D12=1)))

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

=IFERROR(INDEX($1:$1,AGGREGATE(15,6,COLUMN($D$2:$K$2)/$D$2:$K$2,ROW(A1))),"")

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

Приведенные выше формулы основаны на доказательстве концепции изображения ниже.Настройте диапазоны в соответствии с вашими потребностями.

POC

0 голосов
/ 13 сентября 2018

Вы пробовали без использования формулы массива? Я не знаю, насколько большие данные на самом деле. Но это может быть то, что вы ищете:

=IF(COUNTIFS($A:$A,"y",$B:$B,"x",C:C,1)>0,C1,"")

Предполагая, что столбец A равен «1-й», а «H» - ваш последний столбец в столбце J. Попробуйте вставить формулу в «K1» и перетащите ее вправо до «S1».

enter image description here

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