如何使用索引号以指定的顺序从Range中select单个单元格?

我知道我可以使用范围集合,但是我认为我可以利用Range对象的现有function以指定顺序select单个项目。 这样我有更less的对象来pipe理。

例如,我已经指定了我的范围:
Set myrange = ActiveSheet.Range("C11,C9,C7,D6,F6,H6,I7,I9,I11") 。 请注意,这些单元格不一定是明显的顺序或模式。

当我做一些事情时,我可以按照特定的顺序轻松地循环访问For each循环。 我希望能够同样能够从列表中select单个项目(按照该顺序),例如从列表中select第四个单元格。

我发现Range.Areas对象使我非常接近我后,但如果我回来后,添加到我的范围,做一些像Union(myrange, activesheet.Range("C10"))我的第一个3细胞现在合并成一个区域。 如果我要在我的初始列表中声明C10,它不会显示相同的function。

所以我的问题是:是否有另一种方法来select索引个别单元格; 或者是有一个“联合”的function,将保持细胞离散,没有合并范围。

您需要遍历不连续循环的区域,然后遍历每个区域中的每个单元格。

 dim a as long, c as long, myRange as range Set myrange = ActiveSheet.Range("C11,C9,C7,D6,F6,H6,I7,I9,I11") for a=1 to myrange.areas.count for c=1 to myrange.areas(a).cells.count 'do something with myrange.areas(a).cells(c) debug.print myrange.areas(a).cells(c).address(0,0) next c next a 

如果您需要索引单个项目,请创build一个范围数组以帮助您:

 Sub dural() Dim myrange As Range, ary() As Range Dim i As Long Set myrange = ActiveSheet.Range("C11,C9,C7,D6,F6,H6,I7,I9,I11") i = 1 ReDim ary(1 To myrange.Count) For Each a In myrange Set ary(i) = a i = i + 1 Next a End Sub 

然后你可以使用ary(6)获得第六个项目,等等。
如果项目的数量是固定的,那么您可以避免ReDim