Превратить одну строку в несколько строк в Excel

У меня есть несколько предметов, которые доступны в нескольких распределительных центрах (т. Е. Отношение "многие ко многим"). В настоящее время существует одна строка для каждого элемента с одним столбцом для каждого распределительного центра. Ячейка в строке для элемента X и столбец для центра распределения Y помечается кодом для центра распределения Y, если там имеется элемент X, и в противном случае пустым. Элемент с несколькими центрами распространения будет иметь несколько кодов центров распределения (в соответствующих столбцах). Итак, текущий лист выглядит так:

    |   A    |         B         |*|                      S-AJ                      |
1   |  ID #  |   Description     |…|              Distribution Centers              |
2   |   17   |   Ginkgo Biloba   |…|      |      |      |      |      |      |  SE  |
3   |   42   |   Ginseng         |…|      |  MP  |  MS  |      |  NW  |      |      |
                     ︙

Колонны C через R содержат другие атрибуты предметов, такие как код UPC, стоимость и цена, которые не имеют отношения к этому вопросу. Мой фактический лист имеет 18 распределительных центров, охватывающих столбцы S через AJ; Я уменьшил это, чтобы пример вписался в окно Stack Exchange.

Мне нужно иметь один столбец центра распространения, с одним кодом распределения на строку, а затем дублировать строки по мере необходимости для элементов, которые в настоящее время содержат несколько кодов. Результат должен выглядеть так:

    |   A    |         B         |*|   S  |
1   |  ID #  |   Description     |…|  DC  |
2   |   17   |   Ginkgo Biloba   |…|  SE  |
3   |   42   |   Ginseng         |…|  MP  |
4   |   42   |   Ginseng         |…|  MS  |
5   |   42   |   Ginseng         |…|  NW  |
                     ︙

где клетки A3:R3, A4:R4, а также A5:R5, содержат ту же информацию.

Единственный способ сделать это, что потребовало бы много времени, - это скопировать номер элемента в несколько строк; и в столбце, который имеет код распространения, я бы изменил код для элемента, доступного в каждом центре распространения. Я буду делать это для 900 предметов. Есть ли более простой способ сделать это?

2 ответа

  1. Создайте новый лист. Скопируйте строки заголовка, ширину столбцов и форматы, кроме столбцов. T-AJ, Проще всего скопировать весь лист, затем удалить все строки, кроме 1, и удалить столбцы S-AJ,
  2. Сначала мы хотим скопировать каждую строку элемента из Sheet1 на Sheet218 раз - один раз для каждого распределительного центра. Тип =INDEX(Sheet1!A:A, INT((ROW()-2)/18)+2, 1) & "" в Sheet2!A2, INT((ROW()-2)/18)+2 карты строк 2-19 на Sheet2 грести 2 на Sheet1ряды 20-37 по Sheet2 грести 3 на Sheet1и т. д. & "" заставляет Excel отображать пробел при ссылке на пустую ячейку в Sheet1, Если у вас нет пробелов в Sheet1Вы можете оставить это. Если вам не нравится это конкретное решение, вы можете использовать одно из других решений из Display Blank при ссылке на пустую ячейку в Excel.

    Перетащите / заполните это право, чтобы ячейка R2,

  3. Войти =INDEX(Sheet1!$S:$AJ, INT((ROW()-2)/18)+2, MOD(ROW()-2, 18)+1)в Sheet2!S2, Это ссылается на ту же строку в Sheet1 как приведенная выше формула, но Sheet2!S2 получает значение от Sheet1!S2,Sheet2!S3 получает значение от Sheet1!T2,Sheet2!S4 получает значение от Sheet1!U2и т.д. Это будет отображаться 0s для заготовок.
  4. Выберите всю строку A2:S2 и перетащите / заполните вниз, чтобы получить все ваши данные. Это должно быть в 18 раз больше строк, чем на Sheet1; т.е. 18×900=16200.
  5. Скопируйте все Sheet2 и вставьте значения.
  6. Столбец фильтра S, Отображать только нули. Удалить все строки (кроме строки 1). Снимите фильтр.

Готово.

Более простое решение, но больше ручных усилий: скопируйте уникальные идентификаторы x по времени (где x — количество столбцов, которые нужно преобразовать в строки) для каждой итерации, каждый раз применяйте vlookup со столбцом, который нужно преобразовать в строки.

Другие вопросы по тегам