在Excel中通过VBA创build多个区域

我需要在Excel中将轮廓边框格式设置为多个范围。

像这样的作品:

Union(Range("A1"), Range("B3")).BorderAround(...) 

但只要范围触及,它们就会合并成一个范围,而边界将在整个合并范围内。 使用Range("A1,A2")方式工作,但在区域的数量有限,赢得了工作。

有没有什么办法,给定两个范围r1,r2,让他们作为单独的领域在一个单一的范围内,无论他们是否接触?

编辑:一点澄清:

我可能有一千个地方我想给国界,有时候会感动。 我想得到一个包含所有(正确的区域)的单个区域,并在单个区域上进行操作。 原因是:

  1. 我可以更干净地从函数返回范围,例如GetRangesThatNeedsBorder()
  2. 性能的原因,一次不做一个领域。
  3. 这个function的用户感觉更正确和直观。

由于长度限制,我不想使用联合范围的“string方法”。 我考虑过几个选项:

  • 使用联盟,但创build两个单独的范围,在一种条纹的模式(只在特定情况下),并做两次调用。
  • 使用string方法,但在适当的位置拆分string。

编辑2:是否正确的事情:

 Public Sub test() Dim r As Range Set r = Union(Range("A1:A3"), Range("B1"), Range("B3"), Range("C1:C3")) Call r.BorderAround(2) End Sub 

失败,合并A1:A4:

 Public Sub test() Dim r As Range Set r = Union(Range("A1:A3"), Range("B1"), Range("B3"), Range("C1:C3"), Range("A4")) Call r.BorderAround(2) End Sub 

如果我理解正确,你想从一个像"A1,A2:A3,B1:B3,C3"这样的string开始。 在这种情况下,这应该工作:

 Sub OutlineManyCells() Dim ws As Excel.Worksheet Dim RangeAddress As String Dim RangeAddresses As Variant Dim i As Long RangeAddress = "A1,A2:A3,B1:B3,C3" Set ws = ActiveSheet RangeAddresses = Split(RangeAddress, ",") For i = LBound(RangeAddresses) To UBound(RangeAddresses) ws.Range(RangeAddresses(i)).BorderAround LineStyle:=2 Next i End Sub 

在这里输入图像说明

这样可以解决A1,A2和A3的问题,例如,将“范围内的每个区域”(“A1,A2:A3,B1:B3,C3”)合并为一个区域,连续的细胞。

对于我的一个有点相关的博客文章,请参阅:http: //yoursumbuddy.com/undo-selections-selectracker/