Как создать диапазон из 2 диапазонов в VBA

У меня есть два диапазона, каждый из которых содержит одну ячейку (например, "A1" и "C3" )

Каков самый простой способ получить новый диапазон, содержащий все ячейки между этими двумя ( "A1: C3" ).

Я пытаюсь написать что-то вроде этого, но это не работает:

 Set NewRange = Range(Range1.Address:Range2.Address)

Еще один вопрос, как установить диапазон в формате R1C1? Я хочу использовать нечто вроде Range ( "R1C2" ) вместо Range ( "A2" ).

Спасибо!

Ответы

Ответ 1

Как это?

Sub Sample()
    Dim rng1 As Range, rng2 As Range
    Dim NewRng As Range

    With ThisWorkbook.Sheets("Sheet1")
        Set rng1 = .Range("A1")
        Set rng2 = .Range("C3")

        Set NewRng = .Range(rng1.Address & ":" & rng2.Address)

        Debug.Print NewRng.Address
    End With
End Sub

Вместо формата R1C1 используйте Cells(r,c). Это даст вам больше гибкости + контроль

So Range("A2") может быть записано как Cells(2,1)

Ответ 2

Вы можете установить новый диапазон различными способами. Ниже приведены несколько примеров. Чтобы получить формат R1C1 - мне лично легче ввести нормальную формулу, а затем использовать VBA для извлечения необходимого формата R1C1. Ниже приведены инструкции debug.print.

Sub test()
Dim rng1 As Range
Dim rng2 As Range
Dim newRng As Range

    With Sheet1

        Set rng1 = .Range("A1")
        Set rng2 = .Range("C3")

        Debug.Print rng1.FormulaR1C1
        Debug.Print rng1.FormulaR1C1Local

        'Method1
        Set newRng = .Range(rng1, rng2)

        'method2
        Set newRng = .Range(rng1.Address, rng2.Address)

        'method3 (Only works if rng1 & rng2 are single cells
        Set newRng = .Range(rng1.Address & ":" & rng2.Address)

        'method4
        Set newRng = Union(rng1, rng2)


    End With
End Sub

Ответ 3

Метод 4 не совпадает с методом 1, когда диапазоны не смежны.

With Sheet1
Set rng1 = .Range("A1:A3")
Set rng2 = .Range("C1:C3")

'This combines the two separate ranges, so select A1, A2, A3, C1, C2, C3
set newRng = Union(rng1, rng2)

'This combines the two ranges in the same way as when using "A1:C3", 
'so including the cells from column B
set newRng = .Range(rng1, rng2)

Ответ 4

Поместите это в модуль:

Private Function CombineRanges(rng1 As Range, rng2 As Range) As Range

    Set CombineRanges = ActiveSheet.Range(rng1.Address & ":" & rng2.Address)

End Function

Используйте его как:

Dim NewRange As Range
Set NewRange  = CombineRanges(Range1, Range2)

Ответ 5

Также возможно что-то вроде:

    Dim newRange as Range
    Set newRange = Range("A1:A4,A7:A9,C1:D9")  'Three different regions grouped
    'or
    Set newRange = Range("A1:A4,A7:A9,C1:D9, D10:D11")  'Four different regions grouped.
    'or
    Set newRange = Range("A1:A4,A7:A9,C1:D9, D10:D11, ...")  'N different regions grouped.