我有数据表,其中“产品”列表在范围内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)), "")
有关详细信息,请参阅重复。