2013-11-13 2 views
0

У меня есть большая таблица из двух столбцов в Excel 2010. Столбец A - это пользователь, столбец B - это человек, который пригласил пользователя. Имена пользователей - буквенно-цифровые, в том числе некоторые, которые являются только числовыми. Самые ранние пользователи не имеют приглашенных.Целевая цепочка Excel Excel

User | Parent 
------------- 
AAA | 
BBB | 
CCC | AAA 
DDD | BBB 
EEE | DDD 
FFF | DDD 
GGG | FFF 
HHH | 
III | GGG 

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

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

USER | PARENT | P2 | P3 | P4 | ... 
AAA |  | 
BBB |  | 
CCC | AAA | 
DDD | BBB | 
EEE | DDD | BBB | 
FFF | DDD | BBB | 
GGG | FFF | DDD | BBB 
HHH | 
III | GGG | FFF | DDD | BBB 
... 

Я пробовал различные методы, сочетающие ВПР, MATCH и команду INDEX, с и без ключевого ряда идентификационных номеров пользователей (поскольку некоторые из этих решений без числового столбца сломались при столкновении с тем фактом, что «0» было действительным именем пользователя, что затрудняет захват ошибок). Я могу получить P2 довольно надежно, но я никогда не смогу добраться до P3 без его разрушения. Между прочим, формулы, которые я пробовал, очень интенсивные для процессора, учитывая, что данные идут почти до 400 000 строк, но время вычисления меня не очень беспокоит. Мои методы грубой силы не работают. Есть несколько несколько похожих вопросов о stackoverflow, но они просят немного разные вещи, и я не смог адаптировать их.

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

ответ

1

Попробуйте следующую формулу: =IFERROR(VLOOKUP(C5,UserParent,2,FALSE) & "",""), заменив номер UserParent на вашу пару с указанным номером (например, $B$5:$C$30) или соответствующий именованный диапазон. Скопируйте его и через столбцы бабушки и дедушки.

Я держу пари, что это тот подход, который вы пробовали раньше, но в итоге вы получаете кучу нулей на выходе. Сочный бит в этой формуле - & "". Это заставляет пустые ячейки в родительском столбце рассматриваться как пустые строки, а не нулевые ячейки, когда VLOOKUP выполняет свою работу. Это удаляет все те нули, которые торчат выход.

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

+0

Это хорошо работает. Он не обрабатывает несколько странных имен пользователей правильно (те, которые состоят только из знаков или цифр вопросительного знака), но ничто из нескольких минут незначительной очистки не может обойти.Учитывая объем данных здесь, это вполне разумно и значительно улучшилось по сравнению с тем, что я получал. Большое спасибо! – Dlsn

0

Как вы отметили, существование 0 в качестве действительного имени пользователя является реальной проблемой - поскольку это также возвращается как значение на VLOOKUP() (и эквивалентно INDEX(,MATCH())) для имен без родителей.

Альтернативная стратегия заключается в использовании некоторого фиктивного значения, которое не отображается в столбце «Пользователь» или «Родитель», например -99999, для обозначения отсутствующего родителя и для добавления этого вместо пустой ячейки в столбце «Родитель» таблицу User/Parent. Также добавьте строку в эту таблицу с этим же фиктивным значением в столбцах User и Parent. Теперь вы получите только нуль, возвращаемый VLOOKUP, если 0 действительно является родителем ячейки, чей родитель, которого вы пытаетесь найти. Вы обнаружите, что больше нет «уровней», когда все значения в столбце равны фиктивному значению.

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