2

我有一个变量,它在开始时设置为给定范围。

我想要一个循环语句,它将下一行从给定范围的末尾取出并将其添加到该范围。

IE:

myRows = Range(1:10)

    For Each cell in myRows

       If cell.Value > 2048 Then

           myRows = myRows + myRows.Offset(1, 0) ---This is where i need help---

基本上我如何在每次循环运行时自动增加范围。

编辑:

另外我将如何添加到范围的前面。以及从范围的后面带走。

IE

Range(1:10) 未隐藏 Range(11:20) 已隐藏

我想在未隐藏的范围内添加一个,这将带走隐藏范围,因此它:

Range(1:11) 未隐藏 Range(12:20) 已隐藏

4

2 回答 2

4

你有myRows一个Variant数据类型。您需要将其声明为Range对象。

Dim myRows as Range

然后你需要使用Set关键字来分配一个Range对象)。

Set myRows = Range("1:10")

然后,使用范围.Resize方法:

Set myRows = myRows.Resize(myRows.Rows.Count+1, myRows.Columns.Count)

否则,如果您需要维护myRows类型 Variant,请告诉我,我可以重新处理。

于 2013-07-22T13:51:02.040 回答
3

你也可以使用

Set myRows = Union(myRows, myRows.Offset(1, 0))

编辑:

你自找的!

从通用范围中删除一行

Set myRows = RemoveRowFromRange(myRows, 10)

...

Function RemoveRowFromRange(ByVal Range As Range, row_number As Long) As Range
    With Range.Worksheet
        Select Case row_number
        Case 1
            Set Range = Intersect(Range, .Range(.Rows(2), .Rows(.Rows.Count)))
        Case .Rows.Count
            Set Range = Intersect(Range, .Range(.Rows(1), .Rows(.Rows.Count - 1)))
        Case Else
            Set Range = Union(Intersect(Range, .Range(.Rows(1), .Rows(row_number - 1))), Intersect(Range, .Range(.Rows(row_number + 1), .Rows(.Rows.Count))))
        End Select
    End With
    Set RemoveRowFromRange = Range
End Function
于 2013-07-22T14:57:23.060 回答