我对vba没用,但我需要一个代码来帮助我完成任务。我有数据表,其中“产品”列表在范围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
谢谢
答案 0 :(得分:0)
如果您没有让整个事情完全自动化,您可以使用一个额外的列和数据透视表相对简单地实现它:
在第J列(下面的单元格J38示例)
= IF(I38<> 0,1,0)
对于每个高于0的I单元,这将把J列中的单元格设置为1。
现在选择B到J列,然后选择Insert->数据透视表 。选择将其放在同一张纸上。
拖动"产品" (列B)到数据透视表" ROWS"并将列J拖到" FILTERS"区域。只选择值" 1"对于过滤器。
现在,每次更新第I列后,右键单击 - >刷新数据透视表,它将包含您要查找的产品列表。
可以将数据透视表设置为在打开文件时自动刷新。
在J列中有一种类似的方式:
= IF(I38> 0,B38,"")
然后在列J上使用自动过滤器,用于列不为空的位置。再次 - 这意味着每次都要过滤以更新第I列,然后重新应用过滤器。非常简单但可能没有你想要的自动化......
迈克尔