如何用字符串选择多行

时间:2014-06-16 17:12:24

标签: excel vba excel-vba excel-formula

我试图选择以下行,但它给了我一个调试错误。我认为因为实际的字符串超过256个字符。没有最后127:127的字符串,有效。我怎么能绕过这个?

'不起作用

Range("488:488,456:456,455:455,454:454,453:453,448:448,441:441,440:440,439:439,438:438,437:437,436:436,435:435,421:421,414:414,395:395,392:392,391:391,390:390,389:389,388:388,387:387,386:386,385:385,384:384,383:383,382:382,381:381,380:380,379:379,378:378,369:369,127:127").Select

'工作

Range("488:488,456:456,455:455,454:454,453:453,448:448,441:441,440:440,439:439,438:438,437:437,436:436,435:435,421:421,414:414,395:395,392:392,391:391,390:390,389:389,388:388,387:387,386:386,385:385,384:384,383:383,382:382,381:381,380:380,379:379,378:378,369:369").Select




Selection.Copy

    Sheets.Add after:=ActiveSheet
    ActiveSheet.Paste
    ActiveSheet.Name = "test1"

2 个答案:

答案 0 :(得分:2)

有更短的方式来表示您的范围,但它们是否是您问题的真正解决方案取决于您可能需要选择的最大区域数。

E.g

Range("A401,A403,A405").EntireRow 

使用比

更短的字符串
Range("401:401,403:403,405:405") 

但如果您需要选择更多行,那么最终也会失败。作为一种解决方法,您可以将两个不同的范围联合起来:

... = Application.Union(Range(...), Range(...))

答案 1 :(得分:1)

您可以像处理的那样在字符串中定义范围,然后遍历每一行并将其添加到所选范围。

Sub RangeSelectionTest()

    Dim selectedRange As range
    Dim row
    Dim rows As String
    Dim rowArray() As String

    'Define row selection string
    rows = "488:488,456:456,455:455,454:454,453:453,448:448,441:441,440:440,439:439,438:438,437:437,436:436,435:435,421:421,414:414,395:395,392:392,391:391,390:390,389:389,388:388,387:387,386:386,385:385,384:384,383:383,382:382,381:381,380:380,379:379,378:378,369:369,127:127,150:150"

    'Split to an array to loop
    rowArray = Split(rows, ",")

    ' Loop through all rows and add to range
    For Each row In rowArray
        If selectedRange Is Nothing Then
            Set selectedRange = range(row)
        Else
            Set selectedRange = Union(selectedRange, range(row))
        End If
    Next

    ' Select the range
    selectedRange.Select

End Sub

实际上,您可以创建一个函数,该函数接收范围字符串并返回范围对象。

Sub SelectMyRange()
    Dim rows As String
    'Define row selection string
    rows = "488:488,456:456,455:455,454:454,453:453,448:448,441:441,440:440,439:439,438:438,437:437,436:436,435:435,421:421,414:414,395:395,392:392,391:391,390:390,389:389,388:388,387:387,386:386,385:385,384:384,383:383,382:382,381:381,380:380,379:379,378:378,369:369,127:127,150:150"

    Dim myRange As range
    Set myRange = RangeSelection(rows)
    myRange.Select
End Sub

Function RangeSelection(rangeString As String) As range

    Dim selectedRange As range
    Dim row
    Dim rowArray() As String

    'Split to an array to loop
    rowArray = Split(rangeString, ",")

    ' Loop through all rows and add to range
    For Each row In rowArray
        If selectedRange Is Nothing Then
            Set selectedRange = range(row)
        Else
            Set selectedRange = Union(selectedRange, range(row))
        End If
    Next

    ' Return the range
    Set RangeSelection = selectedRange

End Function