VBA 水平读取联合范围

jum*_*and 2 excel union vba range

我正在尝试组合一系列单元格中的值。我创建了一个范围如下:

Dim rng As Range
Set rng = Application.Union(Range("A1:A3"), Range("C1:E2"))
For Each Address In rng
Debug.Print Address.Address
Next
Run Code Online (Sandbox Code Playgroud)

我想按水平顺序读取单元格:A1、C1、D1、E1、A2、C2...等。但它们被读取 A1、A2、A3、C1、C2...等

我怎样才能水平阅读它们?谢谢

小智 5

您必须处理使用Union 方法创建的Range 对象中Range.Areas

Sub laterally()
    Dim r As Long, c As Long, a As Long
    Dim mnRW As Long, mxRW As Long, mnCL As Long, mxCL As Long
    Dim rng As Range

    With Worksheets("Sheet1")   '<~~ ALWAYS set the worksheet!
        Set rng = Union(.Range("A1:A3"), .Range("C1:E2"))
        Debug.Print rng.Address(0, 0)
        mnRW = Rows.Count: mxRW = 0
        mnCL = Columns.Count: mxCL = 0
        With rng
            For a = 1 To .Areas.Count
                With .Areas(a)
                    mnRW = Application.Min(mnRW, .Rows(1).Row)
                    mxRW = Application.Max(mxRW, .Rows(.Rows.Count).Row)
                    mnCL = Application.Min(mnCL, .Columns(1).Column)
                    mxCL = Application.Max(mxCL, .Columns(.Columns.Count).Column)
                End With
            Next a
            For r = mnRW To mxRW
                For c = mnCL To mxCL
                    If Not Intersect(.Cells, .Parent.Cells(r, c)) Is Nothing Then _
                        Debug.Print .Parent.Cells(r, c).Address(0, 0)
                Next c
            Next r
        End With
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

收集并集范围的范围后,循环遍历每个可能的单元格,并使用Intersect 方法确定它是否属于并集。