如何从存储在数组中的单元格地址中select一组不相邻的单元格?

我有一个单元格地址的单元arrays(单元格可能是不相邻的)。 我想要select所有这些单元格来改变内部颜色。 数组中的单元格表示自工作表的最后一个版本以来已更改的工作簿中的所有单元格,并且我需要突出显示它们以查看更改。

我试着将数组转换为一个string,然后用下面的代码select它们:

For index = 1 To UBound(RTemp) RTempStr = RTempStr & CStr(RTemp(index)) Next RTempStr = Left(RTempStr, Len(RTempStr) - 1) Worksheets("R1").Select Union(RTempStr).Select Selection.Interior = vbRed 

RTemp是我的单元格地址数组

联合函数返回一个types不匹配错误

任何build议如何解决这个问题? 或select细胞的替代方法?

只需通过join创build地址:

 Sub jumble() Dim ary(1 To 3) As String Dim s As String Dim r As Range ary(1) = "A1" ary(2) = "B9" ary(3) = "C11" s = Join(ary, ",") Set r = Range(s) r.Select End Sub 

声明一个范围对象并为其指定一个不连续的范围。 然后您可以直接更改内饰颜色。 看到这个例子。

 Sub sample() Dim rng As Range Set rng = ThisWorkbook.Sheets("Sheet1").Range("A1:A2,C4:C7,D11:D12") rng.Interior.ColorIndex = 3 End Sub 

我是硬编码"A1:A2,C4:C7,D11:D12"如果你有一个数组中的单元格地址,那么你可以构造该string,并将其传递给范围对象。 例如

 Sub sample() Dim Ar(1 To 3) As String Dim rng As Range Dim strAddress As String Dim i As Long Ar(1) = "A1:A2" Ar(2) = "C4:C7" Ar(3) = "D11:D12" For i = 1 To 3 If strAddress = "" Then strAddress = Ar(i) Else strAddress = strAddress & "," & Ar(i) End If Next Set rng = ThisWorkbook.Sheets("Sheet1").Range(strAddress) rng.Interior.ColorIndex = 3 End Sub 

从评论后续

如果数组有说Cell(4,5)然后使用我创build下面的函数。

 Option Explicit Sub Sample() Dim Ar(1 To 5) As String Dim rng As Range Dim strAddress As String Dim i As Long Ar(1) = "Cells(4,5)" Ar(2) = "Cells(6,6)" Ar(3) = "Cells(7,7)" Ar(4) = "Cells(8,12)" Ar(5) = "Cells(9,12)" strAddress = Join(Ar, "#") '<~~ `Join` Courtsey Gary's Student strAddress = GetAddress(strAddress) Debug.Print strAddress Set rng = ThisWorkbook.Sheets("Sheet1").Range(strAddress) rng.Interior.ColorIndex = 3 End Sub Function GetAddress(sAddr As String) As String Dim MyAr Dim sTemp As String, sAddrs As Range Dim Rw As Long, Col As Long, i As Long MyAr = Split(sAddr, "#") For i = 0 To UBound(MyAr) sTemp = Replace(Replace(MyAr(i), "Cells(", ""), ")", "") Rw = Val(Trim(Split(sTemp, ",")(0))) Col = Val(Trim(Split(sTemp, ",")(1))) If sAddrs Is Nothing Then Set sAddrs = ThisWorkbook.Sheets(1).Cells(Rw, Col) Else Set sAddrs = Union(sAddrs, ThisWorkbook.Sheets(1).Cells(Rw, Col)) End If Next i GetAddress = sAddrs.Address End Function