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