У меня есть несколько товаров, которые доступны в нескольких распределительных центрах (т.е. отношение «многие ко многим»). В настоящее время для каждого товара есть одна строка, с одним столбцом для каждого распределительного центра. Ячейка в строке для товара Икси колонна для распределительного центра Иотмечен кодом распределительного центраИесли элемент Иксдоступен там и пуст в противном случае. Элемент с несколькими распределительными центрами будет иметь несколько кодов распределительных центров (в соответствующих столбцах). Таким образом, текущий лист выглядит следующим образом:
| 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 товаров. Есть ли более простой способ сделать это?
решение1
- Создайте новый лист. Скопируйте строку(и) заголовка, ширину столбцов и форматы, но не копируйте Столбцы
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
, вы можете не делать этого. Если вам не нравится это конкретное решение, вы можете использовать одно из других решений из Отображать пустое значение при ссылке на пустую ячейку в 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). Удалить фильтр.
Сделанный.
решение2
Более простое решение, но больше ручных усилий: скопируйте уникальные идентификаторы x количество времени (где x — количество столбцов, которые нужно преобразовать в строки) для каждой итерации, применяйте ВПР к столбцу, который нужно преобразовать в строки каждый раз.