利用Range的Union方法是很不错的,但是要注意,当T字符串的长度超过255个字符时,Range(T)的方法会出错。
我把D1:D99的全部单元格地址打乱组合成T,供大家测试:
Sub TEST()
Dim Rng As Range
T = "D23,D22,D35,D12,D72,D20,D39,D5,D75,D3,D69,D45,D2,D46,D51,D1,D21,D78,D7,D13,D31,D97,D52,D17,D65,D82,D71,D56,D58,D33,D60,D6,D43,D95,D40,D53,D87,D63,D4,D92,D76,D8,D81,D70,D99,D74,D24,D38,D55,D27,D96,D79,D89,D77,D36,D11,D37,D59,D42,D73,D18,D93,D62,D44,D68,D50,D57,D9,D90,D94,D85,D30,D34,D15,D54,D98,D67,D29,D66,D49,D80,D41,D88,D10,D28,D64,D84,D83,D16,D86,D47,D91,D25,D32,D26,D14,D48,D61,D19"
ReDim b(1 To Rows.Count)
tt = Split(Replace(T, "D", ""), ",")
For i = 0 To UBound(tt)
p = Val(tt(i))
b(p) = 1
Next
Set Rng = Nothing
For i = 1 To Rows.Count
If b(i) Then
n = n + 1
If Rng Is Nothing Then
Set Rng = Range("D" & i)
Else
Set Rng = Union(Rng, Range("D" & i))
End If
If n = UBound(tt) + 1 Then Exit For
End If
Next
Debug.Print Rng.Address(0, 0)
End Sub |