Превратить одну строку в несколько строк в 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 ответа
- Создайте новый лист. Скопируйте строки заголовка, ширину столбцов и форматы, кроме столбцов. T-AJ, Проще всего скопировать весь лист, затем удалить все строки, кроме 1, и удалить столбцыS-AJ,
- Сначала мы хотим скопировать каждую строку элемента из - 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,
- Войти =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 для заготовок.
- Выберите всю строку A2:S2и перетащите / заполните вниз, чтобы получить все ваши данные. Это должно быть в 18 раз больше строк, чем наSheet1; т.е. 18×900=16200.
- Скопируйте все Sheet2и вставьте значения.
- Столбец фильтра S, Отображать только нули. Удалить все строки (кроме строки 1). Снимите фильтр.
Готово.
Более простое решение, но больше ручных усилий: скопируйте уникальные идентификаторы x по времени (где x — количество столбцов, которые нужно преобразовать в строки) для каждой итерации, каждый раз применяйте vlookup со столбцом, который нужно преобразовать в строки.