一次选择每个范围Vba

时间:2017-11-10 08:39:29

标签: excel vba excel-vba

如何将循环编码或一次性选择所有可能性。 “在”中应该首先在选定的范围内,并向下延伸到第一个晚期,并在列表中复制相似的范围。 感谢您的反馈

SelectBetween()
    Dim findrow As Long, findrow2 As Long
    On Error GoTo Err
    findrow = Range("A:A").Find("In", Range("A1")).Row
    findrow2 = Range("A:A").Find("Late", Range("A" & findrow)).row
    Range("A" & findrow & ":A" & findrow2).copy
    Exit Sub
Err:
MsgBox "Cells unspecified"
End Sub

1 个答案:

答案 0 :(得分:1)

到目前为止很好的尝试。一点建议:Find方法返回一个范围对象,使用它可以给你一些好处。

Private Sub SelectBetween()
    Dim firstInCell, tmpInCell, firstLateCell, tmpLateCell, copyRange As Range
    On Error GoTo Err
    Set firstInCell = Range("A:A").Find("In", Range("A1"))
    Set firstLateCell = Range("A:A").Find("Late", Range("A1"))

    Set tmpInCell = firstInCell
    Set tmpLateCell = firstLateCell
    Set copyRange = Range(tmpInCell, tmpLateCell)

    Do
        Set tmpInCell = Range("A:A").Find("In", tmpInCell)
        Set tmpLateCell = Range("A:A").Find("Late", tmpInCell)
        Set copyRange = Union(copyRange, Range(tmpInCell, tmpLateCell))
    Loop While tmpInCell.Address <> firstInCell.Address

    copyRange.Copy
    Exit Sub
Err:
    MsgBox "Cells unspecified"
End Sub

逻辑:找到第一个目标并将其存储到firstInCellfirstLateCell中。我构建了一个copyRange来保存所有匹配的范围。 Find函数有一个功能,如果没有找到任何内容,它将回滚到开头,因此我可以检查结果以确定循环是否已完成。