Vba 如何使用索引号从指定顺序的范围中选择单个单元格?

Vba 如何使用索引号从指定顺序的范围中选择单个单元格?,vba,excel,Vba,Excel,我知道我可以只使用范围的集合,但我认为我可以利用范围对象的现有功能以指定的顺序选择单个项目。这样我就可以管理更少的对象 例如,我已将我的范围指定为: Set myrange=ActiveSheet.Range(“C11、C9、C7、D6、F6、H6、I7、I9、I11”)。 请注意,这些单元格不一定具有明显的顺序或模式 当我对每个循环执行类似于的操作时,我可以很容易地按照特定的顺序循环这些单元格。我希望能够同样能够随意从列表中选择单个项目(按该顺序),例如从我的列表中选择第四个单元格 我发现Ra

我知道我可以只使用范围的集合,但我认为我可以利用范围对象的现有功能以指定的顺序选择单个项目。这样我就可以管理更少的对象

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

当我对每个循环执行类似于
的操作时,我可以很容易地按照特定的顺序循环这些单元格。我希望能够同样能够随意从列表中选择单个项目(按该顺序),例如从我的列表中选择第四个单元格

我发现
Range.Areas
对象使我非常接近我所追求的,但是如果我稍后返回并添加到我的范围中,执行类似于
Union(myrange,activesheet.Range(“C10”)
的操作,我的前3个单元格现在合并到一个区域中。如果我在初始列表中声明C10,它不会显示相同的功能


所以我的问题是:是否有其他方法通过索引选择单个单元格;或者有一个类似于“并集”的函数,可以保持单元格离散而不合并范围。

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

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

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

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

然后,您可以使用
ari(6)
来获取第六个项,等等
如果项的数量是固定的,那么您可以避免
ReDim

迭代单元格的惯用方法是为每个
循环使用
,因为
范围
是对象的集合。不清楚为什么顺序很重要。如果我只想进入第六个牢房怎么办?我每次都要循环数到第六个单元格吗?我想能够做一些像myrange之类的事情。有可能吗?我想你们可以制作一个地址字符串数组,然后访问字符串中的各个元素,但如果可能的话,一个单元格的联合会希望将单元格组合成多个区域。