-1

У меня есть лист данных со списком "product" в диапазоне B38:B161 и столбцом "на заказ" в диапазоне I38:I161 который будет обновляться вручную. Таким образом, когда ячейки в диапазоне "I" обновляются с номером на заказ, продукт из диапазона "B" будет скопирован в диапазон J38:J161 первая пустая ячейка J161 . Как мне этого добиться?

Сценарий у меня есть:

Sub copyAboveZero()

Dim sourceRng As Range
Dim cell As Range
Dim i As Long

Set sourceRng = ActiveSheet.Range("I38:I161")
i = 1

For Each cell In sourceRng
    If cell.Value > 0 Then
        cell.Resize(1, 1).Copy Destination:=Range("J" & i)
        i = i + 1
    End If
Next cell

End Sub

Но этот код копирует только диапазон "I" больше нуля ячеек, в то время как я хочу скопировать ячейки из диапазона "B" и вставить его в диапазон "J", если это имеет смысл.

Пример данных:

Column B   Column I   Column J

text1      0          text2
text2      6          text4
text3      0          text5
text4      12            
text5      24            

2 ответа2

1

Нет необходимости использовать VBA для выполнения того, что вы просите.

Используйте следующую формулу в столбце J для каждого продукта (элемента): =IF(I2=0,0,B2) .

При этом значение в столбце J будет равно нулю, если значение в столбце "Порядок" равно нулю, а если это ненулевое число, будет скопировано содержимое ячейки в столбце B.

0

Как подробно объясняется в дубликате Как разбить числа на столбцы с отрицательными и положительными значениями, без пустых ячеек? нет необходимости в любом VBA. Вместо этого вам потребуется формула массива в J38:J161 , например:

=iferror(index(B38:B161, small(if(I38:I161>0, row()-37, ""), row()-37)), "")

Подробнее см. Дубликат.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .