Для нового пользователя Excel я бы держался подальше от VBA без необходимости. Если я правильно понимаю ваш вопрос, вы можете решить его только по формулам. Я старался сделать их максимально простыми.
Во-первых, я бы сохранил исходный набор данных, работая над изображением исходных данных. Это полезно для целей аудита и может помочь вам лучше понять, как это работает. Столбцы будут выглядеть так:
ID | Parent ID | New ID | New Parent ID
----------------------------------------------------
1000000000 | 0 | |
1100000000 | 1000000000 | |
1100000001 | 1100000000 | |
1200000000 | 1000000000 | |
1200000001 | 1200000000 | |
1200000002 | 1200000000 | |
(Для всех примеров я буду использовать один и тот же урезанный набор данных примера. Первый столбец - это столбец A, заголовки столбцов находятся в строке 1.)
Мы дадим новый идентификатор дочернему элементу в столбце Новый идентификатор, а его родительский идентификатор будет автоматически оценен в столбце Новый родительский идентификатор.
Типизированные идентификаторы
Сейчас просто скопируйте и вставьте значения ID в столбец New ID:
ID | Parent ID | New ID | New Parent ID
1000000000 | 0 | 1000000000 |
1100000000 | 1000000000 | 1100000000 |
1100000001 | 1100000000 | 1100000001 |
1200000000 | 1000000000 | 1200000000 |
1200000001 | 1200000000 | 1200000001 |
1200000002 | 1200000000 | 1200000002 |
Затем в первой ячейке идентификатора New Parent введите следующую формулу: =VLOOKUP($B2,$A:$C,3,FALSE)
. Эта формула заставляет Excel смотреть вертикально. Он выглядит следующим образом: «найдите значение ячейки B2 (идентификатор родителя) в столбце A (столбец идентификатора) и, когда найдете точное совпадение, верните значение в третьем столбце (столбец C, новые идентификаторы)».
Учитывая расположение наших данных, это на самом деле означает «поиск идентификатора родителя в столбце идентификатора, а когда вы найдете точное совпадение, верните его новый идентификатор». Прямо сейчас новые идентификаторы идентичны исходным идентификаторам, об этом мы позаботимся позже. Если вам нужно больше объяснений по поводу использования функций (например, VLOOKUP
) в формулах, нажмите кнопку « fx
рядом с панелью формул, а затем ссылку "дополнительная справка по этой функции".
Как только вы введете Enter, формула будет заменена ее результатом и в этом случае значением ошибки #N/A
Это потому, что первый родительский идентификатор не может быть найден в столбце идентификатора. Это логично, поскольку у самого верхнего родителя по определению нет родителя.
Чтобы справиться с этим случаем, мы обновим нашу формулу до =IF($B2=0,0,VLOOKUP($B2,$A:$C,3,FALSE))
. Он читает «если значение в ячейке B2 равно 0, то возвращает 0, в противном случае ищите [...]» или «если идентификатор родителя равен 0, тогда возвращайте 0, в противном случае ищите его новый идентификатор».
Пришло время применить эту формулу ко всему столбцу, что вы можете сделать с помощью простого копирования и вставки:
ID | Parent ID | New ID | New Parent ID
1000000000 | 0 | 1000000000 | 0
1100000000 | 1000000000 | 1100000000 | 1000000000
1100000001 | 1100000000 | 1100000001 | 1100000000
1200000000 | 1000000000 | 1200000000 | 1000000000
1200000001 | 1200000000 | 1200000001 | 1200000000
1200000002 | 1200000000 | 1200000002 | 1200000000
Вот где происходит волшебство
Теперь переписать новый идентификатор. Как в вашем примере, замените 1000000000
на 1
. Вы увидите, что новый идентификатор родителя обновится сразу с новым идентификатором. Сыграйте снова и замените 1100000000
на 10
:
ID | Parent ID | New ID | New Parent ID
1000000000 | 0 | 1 | 0
1100000000 | 1000000000 | 10 | 1
1100000001 | 1100000000 | 1100000001 | 10
1200000000 | 1000000000 | 1200000000 | 1
1200000001 | 1200000000 | 1200000001 | 1200000000
1200000002 | 1200000000 | 1200000002 | 1200000000
Это было весело! Но делать это тысячу раз, нет, спасибо, верно?
Авто-идентификаторы
Вот где Excel сияет, потому что, как только вы задумаетесь, он сделает всю тяжелую работу. В ячейке C4 введите следующую формулу: =C3+10
. Эта единица добавляет десять к значению в ячейке C3, ячейке чуть выше, эффективно увеличивая новый идентификатор на десять. Скопируйте и вставьте его до конца столбца, и все готово:
ID | Parent ID | New ID | New Parent ID
1000000000 0 1 0
1100000000 1000000000 | 10 | 1
1100000001 1100000000 | 20 | 10
1200000000 1000000000 | 30 | 1
1200000001 1200000000 | 40 | 30
1200000002 1200000000 | 50 | 30
Копирование-вставка формул
Последнее слово предостережения. Я предполагаю, что вы будете использовать новые идентификаторы и новые родительские идентификаторы, возможно, в других книгах. В этом случае вы, вероятно, захотите сделать специальную вставку, чтобы сохранить только значение, а не формулу.
Допустим, что когда вы закончите, вы хотите удалить столбцы исходного идентификатора и родительского идентификатора. Перед этим скопируйте столбцы «Новый идентификатор» и «Новый родительский идентификатор», как обычно. Затем вместо вставки используйте special paste
команду вставки и выберите «Значения», затем нажмите «ОК». special paste
команда вставки доступна правой кнопкой мыши на месте назначения, среди других мест.