CrewCut
@CrewCut
Коплю силы на переезд в тропики

Можно ли в экселе копировать ячейки с одно листа, на другой по условию?

Оптовикам нужен прайс в экселе, через который они смогут оформлять заказ. На одном листе находится большой каталог продукции, с характеристиками, ценами и наличием, где они проставляют цифру заказа - сколько штук им надо.

Я хочу чтобы если в рамках диапазона присутствует число больше 0, передавать на второй лист экселя содержимое некоторых ячеек, относительно той, где число больше 0. А именно - размер, цвет, стоимость, модель и прочее.

Как я понимаю, нужно как-то передать координаты заполненной ячейки на второй лист и относительно этих координат - координаты других связанных с ней ячеек.

Можно ли это сделать в экселе (он генерируется через PHPexcel) и если да - то как?
  • Вопрос задан
  • 2397 просмотров
Решения вопроса 1
AnnTHony
@AnnTHony
Интроверт
С помощью следующего макроса:

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) - сюда через запятую заносятся номера столбцов, откуда нужно будет копировать значения.

Дано:

d33cf8b22db241d891eab3710a74bb39.png

В результате:

0724b929127441aab8b73a4aeaed7ece.png
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы