如果大于零,则从范围中复制

如果大于零,则从范围中复制

我有数据表,其中“产品”列表在范围内B38:B161,而“待订购”列在范围内I38:I161,将手动更新。因此,当“I”范围内的单元格用待订购数量更新时,来自“B”范围内的产品将被复制到范围的J38: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            

答案1

无需使用 VBA 来完成您的要求。

在 J 列中针对每个产品(项目)使用以下公式:=IF(I2=0,0,B2)

当“To order”列的值为零时,这将在 J 列中放置零值,当它为非零数字时,它将复制 B 列单元格的内容。

答案2

就像在副本中详细解释的那样如何将数字拆分为具有负值和正值的列,且没有空单元格?不需要任何 VBA。相反,你需要数组公式在 中J38:J161,例如:

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

有关详细信息,请参阅重复。

相关内容