У меня есть база данных продуктов в Excel с несколькими сотнями записей, каждая из которых имеет от 1 до 3 «уровней» ценообразования: Standard, Deluxe и Premium. Каждый уровень имеет свой собственный SKU (A, B или C добавляется в конец основного SKU) и цену. Мои данные таковы:
Name, Description, Price A, Price B, Price C, SKU A, SKU B, SKU C
name1, desc1, 14.95, 19.95, , sku1A, sku1B,
name2, desc2, 4.95, 9.95, 12.95, sku2A, sku2B, sku2C
name3, desc3, 49.95, , , sku3A, ,
Как мне сделать так, чтобы данные выглядели так:
Name, Description, SKU, Price
name1, desc1, sku1A, 14.95
name1, desc1, sku1B, 19.95
name2, desc2, sku2A, 4.95
name2, desc2, sku2B, 9.95
name2, desc2, sku2C, 12.95
name3, desc3, sku3A, 49.95
Если это поможет, я собираюсь импортировать эти продукты в установку Magento.
Заранее благодарю.
microsoft-excel
microsoft-excel-2010
csv
GreysonD
источник
источник
name1
и ,desc1
но с разными ценами на цену A, B, Цена Цена C и т.д.Ответы:
Эти задачи обычно быстрее с VBA. На самом деле это заняло у меня ~ 10 минут.
Я предполагаю, что ваши данные от столбца A до столбца H.
Перейдите к
Excel » Developer » Visual Basic
»На левой панели откройтеsheet1
(или) лист с вашими данными» Вставьте код в правильное окно »Запустите кодКод VBA
объяснение
Я хотел, чтобы код был как можно более коротким, чтобы объяснить его лучше. В основном мы используем две петли. Внешний цикл (
i
) предназначен для строк, а внутренний цикл (j
) - для столбцов цен.Мы интенсивно используем
cells(rowNumber,columnNumber)
для чтения / записи клеток.Линия 2 | Начните цикл со строки 2 до вашего последнего ряда. Перебираем каждую использованную строку
Линия 3 | Начните второй цикл с 0 до 2 (это фактически 3 цикла, по одному на каждый столбец Price)
Линия 4 | Мы используем этот внутренний цикл для проверки значений в нашей текущей строке и столбце Price A, затем Price B и в последнем цикле Price C. Если мы находим значение в столбце Price, мы продолжаем и копируем ячейки. Если цена не указана, мы ничего не делаем и переходим к следующему столбцу Цена
Строка 5 | Подсчитайте счетчик, чтобы узнать, сколько строк мы уже скопировали,
чтобы мы знали, по какой строке мы можем скопировать нашу текущую строку.
Строка 6 | Скопируйте имя столбца
Линия 7 | Скопируйте описание столбца
Строка 8 | Скопируйте столбец Цена A или B или C в зависимости от того, какой внутренний цикл мы в настоящее время
Линия 9 | Скопируйте SKU столбец A или B или C в зависимости от того, какой внутренний цикл мы в настоящее время
Скриншот результата
источник
Вот решение функции листа. Формулы немного плотные, так что будьте осторожны, но это даст то, что вы хотите.
шаги:
Name
, введите прямую ссылку на первуюName
в ваших данных. В вашем примере вы должны указать,=A2
где A2 - имя, указанное в ваших данных. На приведенном ниже скриншоте приведена эта формулаA8
. Все следующие формулы будут соответствовать макету, использованному на скриншоте. Вам, конечно, придется обновить все ссылки на диапазоны, чтобы они соответствовали вашим листам.A9
), и, если количество строк в вашей новой таблице соответствует этому, то оно переходит к следующему имени. Если нет, будет добавлена еще одна строка для указанного выше имени.Заполните эту формулу настолько, насколько вам нужно (пока она не вернет 0 вместо имени).
Description
введите следующую формулу и заполните.SKU
, вставьте следующую формулу в строке формул и нажмите Ctrl+ Shift+ Enter. Это формула массива; если введено правильно, формула появится в строке формул, заключенных в фигурные скобки. Заполните эту формулу в таблице (каждый экземпляр также должен быть в фигурных скобках).Price
вставьте следующую формулу в строку формул и введите ее как формулу массива (нажав Ctrl+ Shift+ Enter). Заполните, и это должно заполнить вашу таблицу.источник