Excel VBA,搜索指定范围

时间:2017-01-05 21:09:12

标签: excel-vba named-ranges vba excel

我对所有这些都很陌生并且到处寻找。

我有一个命名范围" Ruptures"在表7中的(N14:P60),其中我想在列P值大于0的情况下找到并且在片9F:H中粘贴相应的单元N:P。我似乎无法只搜索P列。

这是我迄今为止所尝试过的:

Dim cell As Variant
Dim count As Long
count = 0

With Sheet7

Set Rng = Sheet7.Range("Ruptures")

For Each cell In Rng

'But I only want to check cells from the P column (this is where I am stumped)

If cell.Value > 0 Then
Range(cell.Offset(0, -2), cell.Offset(0, 0)).Copy

Sheet9.Activate
Range("F14", "H14").Offset(count, 0).PasteSpecial (xlPasteValues)

count = count + 1

Sheet7.Activate

Next

End With

End If

End Sub

提前非常感谢,祝你有个美好的一天! :)

乌尔苏拉

1 个答案:

答案 0 :(得分:0)

这是在整个(多列)范围内迭代:

Set Rng = Sheet7.Range("Ruptures")
For Each cell In Rng

您可以使用以下方法将此限制为第三列:

For Each cell in Rng.Columns(3)

我还会简化复制/粘贴to avoid unnecessary worksheet Activate并使用从一个范围到另一个范围的直接Value分配(有关详细信息,请参阅here)。如评论中所述,您的Next语句不能在If块中:

For Each cell in Rng.Columns(3)

    If cell.Value > 0 Then
        Sheet9.Range("F14", "H14").Offset(count, 0).Value = Range(cell.Offset(0, -2), cell.Offset(0, 0)).Value
        count = count + 1
    End If

Next

可以使用Resize方法进一步细化:

For Each cell in Rng.Columns(3)

    If cell.Value > 0 Then
        Sheet9.Range("F14").Offset(count).Resize(1,3).Value = cell.Offset(0,-2).Resize(1,3).Value
        count = count + 1
    End If

Next