Может ли кто-нибудь помочь мне написать формулу Excel, чтобы сделать следующее? Я пытаюсь объединить коды продуктов для клиента из выписки из простого файла. У каждого клиента может быть несколько продуктов, и наоборот (это отношения многие-многие). Мне нужно создать отдельный лист с простым списком клиентов и сопутствующих товаров через запятую. Смотрите изображение, чтобы понять, что я пытаюсь сделать:
2 ответа
Это намного проще, если вы хотите создать пару «вспомогательных столбцов».
Проще всего, если вы положите их на лист 1 (вы можете скрыть их или поместить их вправо (например, столбцы Y
и Z
), если хотите), или вы даже можете поместить их на другой лист.
Я предполагаю, что мы используем столбцы Y
и Z
качестве вспомогательных столбцов, «Cust ID» и «Product ID» находятся в столбцах A
и B
соответственно, а данные начинаются со строки 2 (с заголовками в строке 1).
Введите следующее значение и формулы:
Y2
→0
Y3
→=IF(A3=A4, Y2, Y2+1)
Z2
→=IF(A1=A2, Z1 & ", " & B2, B2)
Перетащите / заполните Y3
и Z2
вниз, насколько это возможно.
Вы должны получить что-то вроде этого:
Столбец Y
определяет диапазон строк для одного клиента.
Если следующая строка имеет идентификатор клиента, отличный от этого (т. Е. Если это последняя строка для этого клиента), мы добавляем 1 к предыдущему значению Y
(т. Е. Строке выше).
В противном случае скопируйте предыдущее значение.
Колонка Z
строит список продуктов для каждого клиента.
Если предыдущая строка имеет тот же номер клиента, что и эта, это означает, что текущая строка не для первой строки для этого клиента, поэтому мы берем значение Z
из предыдущей строки и добавляем продукт из этой строки.
В противном случае, это первая строка для этого клиента, поэтому мы просто взять продукт из этого ряда.
(Предыдущие два предложения могут иметь больше смысла, если вы читаете их в обратном порядке.)
Теперь перейдите к Sheet2.
То же, что и раньше; Я предполагаю, что «Cust ID» и «Products» находятся в столбцах A
и B
соответственно, а данные начинаются со строки 2 (с заголовками в строке 1).
Введите эти формулы:
A2
→=INDEX(Sheet1!A:A, MATCH(ROW()-1, Sheet1!Y:Y, 0))
B2
→=INDEX(Sheet1!Z:Z, MATCH(ROW()-1, Sheet1!Y:Y, 0))
и перетащите / заполните.
Обратите внимание, что две формулы имеют общее выражение:MATCH(ROW()-1, Sheet1!Y:Y, 0)
. Это находит первую строку на Sheet1, где значение Y
является текущим (Sheet2) номером строки, минус 1.
Таким образом, Sheet2 Row 2 ищет 1, Sheet2 Row 3 ищет 2 и т.д. Помните, Sheet1!Y
увеличиваются на единицу в последнем ряду для клиента.
Таким образом, формула в столбце A
вытягивает Sheet1!A
Потребовалась некоторая настройка, но после небольшого количества проб и ошибок это сработало при объединении двух идентичных электронных таблиц, содержащих "некоторые" разные данные. Каждый на более чем 15 000 строк и 132 столбцов! Случайные выборочные проверки все хорошо! Это сэкономило мне кучу времени, спасибо!