3

Может ли кто-нибудь помочь мне написать формулу Excel, чтобы сделать следующее? Я пытаюсь объединить коды продуктов для клиента из выписки из простого файла. У каждого клиента может быть несколько продуктов, и наоборот (это отношения многие-многие). Мне нужно создать отдельный лист с простым списком клиентов и сопутствующих товаров через запятую. Смотрите изображение, чтобы понять, что я пытаюсь сделать:

http://i.stack.imgur.com/QJgsK.jpg

2 ответа2

1

Это намного проще, если вы хотите создать пару «вспомогательных столбцов».  Проще всего, если вы положите их на лист 1 (вы можете скрыть их или поместить их вправо (например, столбцы Y и Z), если хотите), или вы даже можете поместить их на другой лист.  Я предполагаю, что мы используем столбцы Y и Z качестве вспомогательных столбцов, «Cust ID» и «Product ID» находятся в столбцах A и B соответственно, а данные начинаются со строки 2 (с заголовками в строке 1).

Введите следующее значение и формулы:

  • Y20
  • 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

            

0

Потребовалась некоторая настройка, но после небольшого количества проб и ошибок это сработало при объединении двух идентичных электронных таблиц, содержащих "некоторые" разные данные. Каждый на более чем 15 000 строк и 132 столбцов! Случайные выборочные проверки все хорошо! Это сэкономило мне кучу времени, спасибо!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .