2015-10-08 3 views
0

У меня есть матрица в Excel работает отлично:Как написать индекс, матрицу соответствия в Excel?

=INDEX('KIT e SVLAN'!N:N;MATCH(1;('KIT e SVLAN'!A:A=E3)*('KIT e SVLAN'!AK:AK="S")*('KIT e SVLAN'!AL:AL="AT");0)) 

Я хотел бы добавить к нему еще одно условие: ('KIT е SVLAN' L: L = "0")

к получить что-то вроде:

=INDEX('KIT e SVLAN'!N:N;MATCH(1;(('KIT e SVLAN'!A:A=E4)*('KIT e SVLAN'!L:L="0")*('KIT e SVLAN'!AK:AK="S")*('KIT e SVLAN'!AL:AL="AT"));0)) 

, когда я нажимаю Ctrl + Shift + Enter второй матрицы дает N/A, где на самом деле она должна возвращать значение. Что может быть решением? Благодаря

+1

Использование целых ссылок на колонки в формуле массива - это катастрофическая идея. Ваша вторая формула вынуждена вычислять более 4 миллионов ячеек, что является абсолютно удивительной суммой для одной формулы. –

+0

, который может быть решением? VBA или альтернативная формула? – Ale

+0

Вы подтвердили, что существует хотя бы одна строка, для которой выполняются все эти условия? Это единственный способ объяснить, почему вы получаете # N/A в результате, т. Е. Нет строк, соответствующих всем 4 условиям. –

ответ

0

После удаления цитаты из раздела ...*('KIT e SVLAN'!L:L=0)*..., вы имеете рабочую формулу, как,

=INDEX('KIT e SVLAN'!N:N;MATCH(1;(('KIT e SVLAN'!A:A=E4)*('KIT e SVLAN'!L:L=0)*SIGN(LEN('KIT e SVLAN'!L:L))*('KIT e SVLAN'!AK:AK="S")*('KIT e SVLAN'!AL:AL="AT"));0)) 

Чтобы сделать его более эффективным, изменить ссылочный блок данных на KIT е SVLAN листов на динамический именованный диапазон. Путем ссылки на именованный диапазон, только точно столько строк будет обработано, сколько необходимо. Диапазон изменится, когда новые строки будут добавлены или удалены.

Одним из статических условий для формулы является то, что столбец AL равен "AT". Если мы сократим диапазон до последней строки, содержащей любой текст в столбце AL, ничего ниже, что имеет значение, поскольку они никогда не будут возвращены в любом случае. Последняя строка, содержащая текстовое значение в столбце AL может быть достигнута с помощью следующей формулы,

=match(char(255); AL:AL) 

Да, есть цитируемое пространство, совпадающий. Пространство важно для MATCH function, чтобы вернуть последнюю строку из столбца текста.

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

Перейти к формулам ► Определенные имена ► Менеджер имен. Когда откроется диалоговое окно «Диспетчер имен», нажмите Новый.

  1. Дайте название диапазона. Я выбрал kesDATA.
  2. Оставить Сфера применения: как Рабочая тетрадь. Необязательно предоставить комментарий.
  3. Предоставьте следующую формулу для Относится к:,

    ='KIT e SVLAN'!$A$1:index('KIT e SVLAN'!$A:$XFD; match(char(255); $AL:$AL); match(char(255); $1:$1))
  4. Нажмите OK создать имя затем Закрыть, чтобы закрыть диалоговое окно.
  5. [опционально] Тестирование нового именованного диапазона, нажав F5 , набрав kesDATA и нажав кнопку OK . Вы должны выбрать весь именованный диапазон.

    Name Manager - Create New Name
    Имя менеджера - создать новое имя

Теперь изменить формулу к одной из этих массивов formulas¹,

'for zeroes and blanks in column L 
=INDEX(INDEX(kesDATA; ; 14); MATCH(1; (INDEX(kesDATA; ; 1)=E3)*NOT(INDEX(kesDATA; ; 12))*(INDEX(kesDATA; ; 37)="S")*(INDEX(kesDATA; ; 38)="AT"); 0)) 
'for zeroes in column L but not blanks, 
=INDEX(INDEX(kesDATA; ; 14); MATCH(1; (INDEX(kesDATA; ; 1)=E3)*NOT(INDEX(kesDATA; ; 12))*SIGN(LEN(INDEX(kesDATA; ; 12)))*(INDEX(kesDATA; ; 37)="S")*(INDEX(kesDATA; ; 38)="AT"); 0)) 

... или один из стандартных формул используя новый AGGREGATE² function для выполнения множественного столбца cri терапия.

'for zeroes and blanks in column L, 
=INDEX(INDEX(kesDATA; ; 14); AGGREGATE(15; 6; ROW(INDEX(kesDATA; ; 14))/((INDEX(kesDATA; ; 1)=E3)*NOT(INDEX(kesDATA; ; 12))*(INDEX(kesDATA; ; 37)="S")*(INDEX(kesDATA; ; 38)="AT")); 1)) 
'for zeroes in column L but not blanks, 
=INDEX(INDEX(kesDATA; ; 14); AGGREGATE(15; 6; ROW(INDEX(kesDATA; ; 14))/((INDEX(kesDATA; ; 1)=E3)*NOT(INDEX(kesDATA; ; 12))*SIGN(LEN(INDEX(kesDATA; ; 12)))*(INDEX(kesDATA; ; 37)="S")*(INDEX(kesDATA; ; 38)="AT")); 1)) 

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


¹ Формулы массива должны быть завершены с Ctrl + Сдвиг + Enter↵. После правильного ввода в первую ячейку они могут быть заполнены или скопированы или правы точно так же, как и любая другая формула. Попробуйте и уменьшите ссылки на полные столбцы на диапазоны, более подробно представляющие экстенты ваших фактических данных. Формулы массива ломают логарифмически расчетные циклы, поэтому рекомендуется сократить суженные диапазоны ссылок до минимума. См. Guidelines and examples of array formulas для получения дополнительной информации.

² AGGREGATE function был представлен с Excel 2010. Он не доступен в более ранних версиях.

+0

Интересно, что ваша конструкция для поиска последней непустой строки из столбца текстовых записей, хотя, возможно, и не самая строгая. Не все текстовые строки> "". Например, один дефис («-») не является и, следовательно, потенциально может привести к сбою конструкции. Разумеется, вы можете утверждать, что список персонажей, которые вызывают потерю конструкции, состоит только из тех, которые настолько неясны или настолько редки, что в какой-либо практической ситуации его присутствие всего лишь 99,9% должно быть достаточно.Однако лично я чувствую, что мы всегда должны стремиться к 100% :-) –

+0

@XORLX - Как правило, я использовал 'match (« zzz », $ AT: $ AT) в прошлом. Один выше - это что-то новое, что я пытаюсь сделать. – Jeeped

+1

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

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