如何在VBA中创建2个范围的范围

gro*_*zhd 21 excel vba excel-vba

我有两个范围,每个范围包含一个单元格(例如"A1"和"C3")

获得包含这两者之间所有单元格的新范围("A1:C3")的最简单方法是什么.

我想写这样的东西,但这不起作用:

 Set NewRange = Range(Range1.Address:Range2.Address)
Run Code Online (Sandbox Code Playgroud)

我的另一个问题是如何设置R1C1格式的范围?我想使用Range("R1C2")而不是Range("A2")之类的东西.

谢谢!

Sid*_*out 24

像这样?

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
Run Code Online (Sandbox Code Playgroud)

而不是R1C1格式使用Cells(r,c).这将为您提供更多灵活性+控制

所以Range("A2")可以写成Cells(2,1)


use*_*963 14

您可以通过各种方式设置新范围.以下是一些例子.要获得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
Run Code Online (Sandbox Code Playgroud)


小智 10

当范围不相邻时,方法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)
Run Code Online (Sandbox Code Playgroud)