Vlookup для двойных значений - PullRequest
0 голосов
/ 01 июля 2019

Как я могу создать код vlookup или VBA, чтобы функция Vlookup не всегда принимала первое, но после того, как первое было принято, также второе значение и т. Д. Я думаю, что это становится понятнее со скриншотом enter image description here

Некоторые дальнейшие объяснения: Столбец А является идентификатором (в реальной выборке это ключ (идентификационный номер) компании) Колонка B представляет номер сделки. Но не для каждой сделки доступны клипы (объясняются пустые места), и компания может заключать несколько сделок (-> значения в столбце A не являются взаимоисключающими)

Поскольку значения в столбце A не являются взаимоисключающими, я должен "сопоставить" значения столбца B, которые являются взаимоисключающими, с вхождением в столбце D

Ответы [ 3 ]

4 голосов
/ 01 июля 2019

Используйте это, но для этого требуется строка заголовка в столбце данных:

=IF(D1=D2,E1,INDEX(B:B,AGGREGATE(15,7,ROW($B$1:$B$6)/($A$1:$A$6=D2),COUNTIFS($D$1:D1,D2,$D$2:D2,"<>"&D2)+1)))

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

enter image description here


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

=IF(D1=D2,E1,INDEX(B:B,AGGREGATE(15,7,ROW($B$1:INDEX(B:B,MATCH("zzz",A:A)))/($A$1:INDEX(A:A,MATCH("zzz",A:A))=D2),COUNTIFS($D$1:D1,D2,$D$2:D2,"<>"&D2)+1)))

0 голосов
/ 04 июля 2019

Вы, вероятно, уже получили свой ответ. Вот хорошее (дополнительное) решение.

=IFERROR(INDEX($B$3:$B$13, SMALL(IF(D$2=$A$3:$A$13, ROW($B$3:$B$13)-2,""), ROW()-2)),"")

или

=IFERROR(INDEX($B$3:$B$13,SMALL(IF(D$2=$A$3:$A$13,ROW($A$3:$A$13)- MIN(ROW($A$3:$A$13))+1,""), ROW()-2)),"")

Смотрите эту ссылку: https://www.ablebits.com/office-addins-blog/2017/02/22/vlookup-multiple-values-excel/

Чтобы получить код VBA, войдите в функцию и запустите ее, затем включите Macro Recorder, нажмите на основную ячейку (первую ячейку), нажмите F2, нажмите Enter, чтобы зафиксировать изменение, и дважды щелкните черный крестик, чтобы заполнить вниз. Теперь у вас должен быть весь ваш VBA, и, конечно, вы можете изменить свой код так, чтобы он делал все, что вам угодно.

0 голосов
/ 01 июля 2019

Если я понимаю, как заполняются ваши столбцы A & B (глядя на события в C & D), почему бы просто не использовать данные C & D?

Вы можете найти такое количество заданий, что (у меня это в D2):

=IFERROR(IF(C2=C1,D1,D1+1),1)

Это даст вхождения без использования Vlookup или Index / Match, добавив 1, когда задача меняется (iferror используется для получения первого «1», так как вы не можете добавить «вхождение» + 1).

enter image description here

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