找到包含另一个范围的最短矩形范围
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 对象
假设我有以下范围:
$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 对象