как я могу выбрать несколько строк с помощью строки

#vba #excel #excel-formula

#vba #excel #excel-формула

Вопрос:

я попытался выбрать следующие строки, но это выдает ошибку отладки. я думаю, потому что фактическая строка превышает 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"
  

Ответ №1:

Существуют более короткие способы представления вашего диапазона, но являются ли они реальными решениями вашей проблемы, зависит от максимального количества областей, которые вам когда-либо понадобится выбрать.

Например

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

использует строку с более коротким диапазоном, чем

 Range("401:401,403:403,405:405") 
  

но если вам нужно выбрать еще много строк, то в конечном итоге это также приведет к сбою. В качестве обходного пути вы можете объединить два отдельных диапазона:

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

Ответ №2:

Вы можете определить диапазон в строке, как вы это делали, а затем перебирать каждую строку и добавлять ее в выбранный диапазон.

 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