2017-05-26 4 views
2

Ich weiß, dass ich einfach eine Sammlung von Bereichen verwenden könnte, aber ich dachte, ich könnte die vorhandenen Funktionen des Range-Objekts nutzen, um einzelne Elemente in einer bestimmten Reihenfolge auszuwählen. Auf diese Weise habe ich weniger Objekte zu verwalten.So wählen Sie einzelne Zellen aus einem Bereich in einer angegebenen Reihenfolge mit einer Indexnummer aus?

Zum Beispiel habe ich meinen Bereich angegeben als:
Set myrange = ActiveSheet.Range("C11,C9,C7,D6,F6,H6,I7,I9,I11"). Beachten Sie, dass diese Zellen nicht unbedingt in einer offensichtlichen Reihenfolge oder Muster sind.

Wenn ich etwas wie eine For each Schleife mache, kann ich leicht durch diese Zellen in dieser bestimmten Reihenfolge. Ich möchte in der Lage sein, einzelne Objekte aus der Liste (in dieser Reihenfolge) nach Belieben auswählen zu können, zum Beispiel die vierte Zelle aus meiner Liste auszuwählen.

Ich habe festgestellt, dass das Objekt Range.Areas mich ziemlich nah an das, was ich bin, aber wenn ich später zurück und zu meinem Bereich hinzufügen, so etwas wie Union(myrange, activesheet.Range("C10")) meine ersten 3 Zellen sind jetzt in einem einzigen Bereich verschmolzen. Es zeigt nicht dieselbe Funktionalität, wenn ich C10 in meiner ursprünglichen Liste deklarieren würde.

Also meine Frage ist entweder: Gibt es eine andere Möglichkeit, einzelne Zellen nach Index auszuwählen; ODER gibt es eine "Union" -ähnliche Funktion, die Zellen diskret hält, ohne Bereiche zu verschmelzen.

+0

Die idiomatische und performante Art, Zellen zu iterieren, ist mit einer 'For Each'-Schleife gemeint, wobei' Range' eine Sammlung von Objekten ist. Nicht klar, warum die Reihenfolge überhaupt wichtig ist. –

Antwort

1

Sie müssen die Bereiche Ihrer nicht zusammenhängenden Schleife durchlaufen und dann jede Zelle in jedem Bereich durchlaufen.

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 
+0

Also, wenn ich nur auf die 6. Zelle zugreifen möchte? Muss ich eine Schleife machen, um jedes Mal bis zur 6. Zelle zu zählen? Ich möchte in der Lage sein, etwas wie myrange.etwas (6) zu tun, ist das möglich? –

+0

Ich nehme an, Sie könnten ein String-Array der Adressen machen und dann auf einzelne Elemente des Strings zugreifen, aber eine Vereinigung von Zellen ** will ** Zellen in Bereiche gruppieren, wenn es möglich ist. – Jeeped

0

Wenn Sie indizieren einzelne Elemente benötigen, dann eine Array von Bereichen erstellen, Sie zu unterstützen:

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 

Dann Sie ary(6) verwenden könnten die sechsten Artikel zu bekommen, usw.
Wenn die Anzahl der Elemente fest ist, können Sie die ReDim vermeiden.

Verwandte Themen