如果VBA范围大于零复制

时间:2014-12-21 16:04:10

标签: excel vba

我对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

谢谢

1 个答案:

答案 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列,然后重新应用过滤器。非常简单但可能没有你想要的自动化......

迈克尔