С помощью следующего макроса:
Sub GetProduct()
' Первая снизу непустая ячейка
Dim LastRow As Integer
' Номер столбца с количеством > 0 (A = 1, B = 2 и т.д.)
Dim PriceCol As Integer
PriceCol = 3
' Название листа с каталогом товаров
Dim PriceList As Worksheet
Set PriceList = Excel.Workbooks(1).Worksheets.Item("Лист2")
' Название листа, на который копируются нужные ячейки
Dim TotalList As Worksheet
Set TotalList = Excel.Workbooks(1).Worksheets.Item("Лист1")
' Значение ячейки с количеством товара
Dim Count As Object
' Массив номеров столбцов для копирования
Dim Cols
Cols = Array(1, 2)
' Счетчик строк для копирования
Dim CountRow As Integer
CountRow = 1
' Счетчик столбцов для копирования
Dim CountCol As Integer
LastRow = PriceList.Cells(Rows.Count, PriceCol).End(xlUp).Row
For i = 1 To LastRow
Set Count = PriceList.Cells(i, PriceCol)
If (IsNumeric(Count)) And (Count > 0) Then
CountCol = 1
For Each copycell In Cols
TotalList.Cells(CountRow, CountCol) = PriceList.Cells(i, copycell)
CountCol = CountCol + 1
Next
CountRow = CountRow + 1
End If
Next i
End Sub
Логика такая:
- Находим самую последнюю непустую ячейку с количеством товара
- Пробегаем до нее все строки, начиная с первой
- Копируем все ячейки строки, где количество товара > 0
Cols = Array(1, 2)
- сюда через запятую заносятся номера столбцов, откуда нужно будет копировать значения.
Дано:
В результате: