Вопрос или проблема
Моя ситуация:
Я получил огромную таблицу Excel от производителя товаров для моего интернет-магазина. Формат такой:
идентификатор товара | цена | название | ...
Каждую неделю производитель отправляет мне обновленный список с новыми товарами. Мне нужно знать, какие товары новые в этом списке. Поэтому мне нужен фрагмент кода, который выполняет следующее:
- Я вставлю старый список товаров на лист1 (вручную)
- Я вставлю новый список товаров на лист2 (вручную)
- Сравнить идентификаторы товаров на лист1 и лист2
- Вставить товары (строки) из нового списка (Лист2) на Лист3, которые отсутствуют в старом списке (Лист1)
Таким образом, результат на Лист3 будет содержать все новые товары.
Надеюсь, вы сможете направить меня в правильном направлении.
С уважением
Я думаю, вам может понадобиться что-то подобное:
=VLOOKUP(Sheet1!A1:A100,Sheet2!A1:F100,6,FALSE)
Конечно, вы также можете решить эту задачу с помощью VBA с кнопками и различными красивыми вещами.
На самом деле, я бы сделал это совершенно иначе, используя надстройку PowerQuery от Microsoft, но я не знаю, как хорошо она работает в Excel 2010 (она не работает в Excel 2007). С ее помощью вы можете выполнять запросы с добавлением с группировкой по идентификатору товара, так что получите уникальный список.
Другой способ – держать листы в разных файлах и использовать инструмент запроса Excel для выполнения соединительного запроса по двум таблицам в новую таблицу.
В любом случае, как только у вас есть новая таблица, вы сохраняете ее в ожидании следующего объединения.
В Sheet2
(обновленный элемент) добавьте столбец D, который проверяет, является ли товар новым:
=MATCH(A2,Sheet1!$A:$A,0)>0
Добавьте столбец E, который дает TRUE
значения в столбце D уникальный идентификатор
=D5&COUNTIF(D$2:D2)
Теперь перейдите на Sheet3
(новые товары) и добавьте индексный столбец, например, в столбец E с значениями TRUE1
, TRUE2
, TRUE3
и так далее, столько, сколько вы думаете, вам когда-либо понадобится (например, если однажды появится 20 новых товаров, а вы дойдете только до TRUE15
, тогда вы пропустите 5 товаров).
Затем вы можете добавить новые товары с помощью:
=INDEX(Sheet2!A:A,MATCH($E2,Sheet2!$E:$E,0))
Ответ или решение
Для решения задачи сравнения двух листов в Excel и извлечения различий на третий лист, можно использовать различные подходы. Предлагаю вам один из способов выполнения данной задачи с помощью формул Excel.
Шаги выполнения задачи:
-
Вставка данных:
- Вставьте старый список продуктов в Лист1 (Sheet1).
- Вставьте новый список продуктов в Лист2 (Sheet2).
-
Добавление формул для проверки новых продуктов:
- На Лист2 (где находится обновленный список товаров), добавьте новый столбец, например, столбец D, чтобы проверить, являются ли продукты новыми. В ячейку D2 введите следующую формулу:
=IF(ISERROR(MATCH(A2, Sheet1!$A:$A, 0)), "Новый", "Старый")
Эта формула проверит, находится ли ID продукта из ячейки A2 в старом списке (в столбце A на Листе1). Если ID не найден, то продукт считается новым.
- На Лист2 (где находится обновленный список товаров), добавьте новый столбец, например, столбец D, чтобы проверить, являются ли продукты новыми. В ячейку D2 введите следующую формулу:
-
Фильтрация новых товаров:
- Отфильтруйте данные на Лист2 по столбцу D, оставив только те строки, где указано "Новый".
-
Копирование новых товаров на третий лист:
- Скопируйте отфильтрованные строки (новые продукты) и вставьте их на Лист3 (Sheet3).
Альтернативный способ с использованием VBA
Если вы хотите автоматизировать данный процесс, вы можете использовать макрос VBA. Вот пример кода, который выполняет эту задачу:
Sub FindNewProducts()
Dim wsOld As Worksheet, wsNew As Worksheet, wsDiff As Worksheet
Dim oldID As Range, newID As Range, cell As Range
Dim lastRowOld As Long, lastRowNew As Long, lastRowDiff As Long
' Устанавливаем ссылки на листы
Set wsOld = ThisWorkbook.Sheets("Sheet1")
Set wsNew = ThisWorkbook.Sheets("Sheet2")
Set wsDiff = ThisWorkbook.Sheets("Sheet3")
' Находим последние строки в листах
lastRowOld = wsOld.Cells(wsOld.Rows.Count, "A").End(xlUp).Row
lastRowNew = wsNew.Cells(wsNew.Rows.Count, "A").End(xlUp).Row
' Очищаем предыдущие данные на листе 3
wsDiff.Cells.ClearContents
' Сравниваем данные
For Each cell In wsNew.Range("A2:A" & lastRowNew) ' Начинаем со второго ряда, пропуская заголовки
If Application.WorksheetFunction.CountIf(wsOld.Range("A2:A" & lastRowOld), cell.Value) = 0 Then
lastRowDiff = wsDiff.Cells(wsDiff.Rows.Count, "A").End(xlUp).Row + 1
wsDiff.Rows(lastRowDiff).Value = cell.EntireRow.Value
End If
Next cell
End Sub
Как использовать макрос:
- Откройте Excel и нажмите
Alt + F11
, чтобы открыть редактор VBA. - Вставьте новый модуль, выбрав
Insert > Module
. - Скопируйте и вставьте приведенный выше код в модуль.
- Закройте редактор VBA.
- Снова вернитесь в Excel и запустите макрос, выбрав
View > Macros
, затем выберитеFindNewProducts
и нажмитеRun
.
Заключение
С помощью формул или VBA вы сможете эффективно находить и извлекать новые продукты из обновленного списка в Excel. Выберите тот метод, который лучше всего соответствует вашим потребностям и удобству работы. Надеюсь, это поможет вам управлять вашими продуктами более эффективно.