找到包含另一个范围的最短矩形范围

Find the shortest rectangular range that contains another range

假设我有以下范围:

$A:$C,$D:$E,$G

有一些方法组合可以给出包含这个的最短矩形范围?在我的例子中,答案应该是:

$A:$G

OBS:我正在使用带有 VB.NET

的 VSTO 2013 为 Excel 2013 构建一个加载项

谢谢!

您可以使用 .Areas 个不连续的范围。

Dim a, r1 As Long, c1 As Long, r2 As Long, c2 As Long, rng As Range
Range("$A:$C,$D:$E,$G").Select
Range("$A:$G").Select
r1 = Rows.Count: r2 = 1
c1 = Columns.Count: c2 = 1
With Range("$A:$C,$D:$E,$G")
    For Each rng In .Areas
        With rng
            If .Cells(1, 1).Row < r1 Then r1 = .Cells(1, 1).Row
            If .Cells(1, 1).Column < c1 Then c1 = .Cells(1, 1).Column
            If .Cells(.Rows.Count, 1).Row > r2 Then r2 = .Cells(.Rows.Count, 1).Row
            If .Cells(1, .Columns.Count).Column > c2 Then c2 = .Cells(1, .Columns.Count).Column
        End With
    Next rng
End With
Debug.Print Range(Cells(r1, c1), Cells(r2, c2)).Address(0, 0)

我不完全确定这将如何适合 VB.Net/VSTO 项目,但这就是 VBA 中解决问题的方式。这些方法应该很容易转移到 VB.Net.

中的 Excel 对象