Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1700to1704
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Range durch Schleife vergrössern

Range durch Schleife vergrössern
07.07.2019 16:44:21
Kailash
Hallo Excel Freunde!
Wie kann man Werte finden und die gefundenen Zellen in einem Range zusammenfassen und diesen dann markieren.
Ich dachte so, aber das funktioniert nicht:
Sub RangeZusammensetzen()
Dim Zelle As Range
Dim Bereich As Range
For Each Zelle In ActiveSheet.UsedRange
If Zelle = "Treffer" Then
Bereich = Bereich & Zelle
End If
Next Zelle
Bereich.Select
End Sub
Man kann ja den Bereich als String definieren und dann so:
Bereich = Bereich & Zelle.address
Aber wenn es viele Zellen sind, dann funktioniert das nicht, dann kommt beim Auswählen ne Fehlermeldung.
Viele Grüsse
Kailash

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range durch Schleife vergrössern
07.07.2019 16:46:00
Daniel
Hi
if Bereich is nothing then
set Bereich = Zelle
else
Set Bereich = Union(Bereich, Zelle)
end if

Gruß Daniel
AW: Range durch Schleife vergrössern
07.07.2019 17:15:27
Kailash
Hallo Daniel!
Hab da schon mehrere Stunden mit zugebracht.
Dein Vorschlag scheint mir logisch, doch funktioniert es nicht.
Es wird nur die erste Zelle ausgewählt. Die Variable "Bereich" erweitert sich auch nicht.
Wenn ich "?Bereich" ins Direktfenster schreibe, dann steht da immer nur die erste Zelle obwohl schon 80 gefunden wurden.
Sub RangeZusammensetzen()
Dim Zelle As Range
Dim Bereich As Range
For Each Zelle In ActiveSheet.UsedRange
If Zelle = "Treffer" Then
If Bereich Is Nothing Then
Set Bereich = Zelle
Else
Bereich = Union(Bereich, Zelle)
End If
End If
Next Zelle
Bereich.Select
End Sub
Viele Grüsse
Anzeige
AW: Range durch Schleife vergrössern
07.07.2019 17:22:17
Daniel
DA du mit Objekten arbeitest, musst du Variablen immer mit SET zuweisen:
Set BEREICH = Union(... !
Gruß Daniel
Danke Daniel und Hajo!
07.07.2019 17:28:07
Kailash
Danke Daniel!
Danke Hajo!
Normalerweise meckert Excel wenn man Set vergisst.
Wenn ich beim erste "Set Bereich" das Set weglasse meckert Excel, aber beim zweiten meckerte er nicht.
Was für eine grosse Hilfe ihr mir seid!
Echt Toll!
Viele Grüsse
AW: Range durch Schleife vergrössern
07.07.2019 17:34:30
onur
"Wenn ich "?Bereich" ins Direktfenster schreibe" - Du kannst einen Bereich nicht so überprüfen, nur wenn der Bereich NUR EINE Zelle enthält, wird der Wert diser Zelle ausgedruckt, sonst kommt eine Fehlermeldung.
Anzeige
AW: Range durch Schleife vergrössern
07.07.2019 17:39:26
Kailash
Onur! Du hast Recht.
Ich kann
?Bereich.Address

ins direktfenster schreiben. Dann werden alle Zellen ausgegeben, nicht die Werte.
AW: Range durch Schleife vergrössern
07.07.2019 17:49:40
Daniel
wobei ich hier bei vielen Zellen mit
?Bereich.Cells.Count

testen würde.
Gruß Daniel
AW: Range durch Schleife vergrössern
07.07.2019 16:55:01
Hajo_Zi
Hallo Kailash,
Option Explicit
Sub RangeZusammensetzen()
Dim Zelle As Range
Dim Bereich As Range
For Each Zelle In ActiveSheet.UsedRange
If Zelle = "Treffer" Then
If Bereich Is Nothing Then
Set Bereich = Zelle
Else
Set Bereich = Union(Bereich, Zelle)
End If
End If
Next Zelle
Bereich.Select
End Sub

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
Anzeige
AW: Range durch Schleife vergrössern
07.07.2019 17:23:33
Regina
Moin,
so sollte es funktionieren:
Sub RangeZusammensetzen()
Dim Zelle As Range
Dim Bereich As String
For Each Zelle In ActiveSheet.UsedRange
If Zelle = "Treffer" Then
If Bereich = "" Then
Bereich = Zelle.Address
Else
Bereich = Bereich & "," & Zelle.Address
End If
End If
Next Zelle
Range(Bereich).Select
End Sub
Gruß Regina
AW: Range durch Schleife vergrössern
07.07.2019 17:28:33
Daniel
Funktioniert schon, solange es nicht allzuviele Zellen sind, denn der String Bereiche darf nicht länger als 256 Zeichen sein, sonst funktioniert das Range(Bereiche) nicht.
Gruß Daniel
AW: Range durch Schleife vergrössern
07.07.2019 17:29:25
Regina
ok, da hast Du Recht, hatt eich nicht bedacht.
Gruß
Regina
Anzeige
Regina: geht nicht mit vielen Treffern
07.07.2019 17:34:03
Kailash
Hallo Regina!
Danke für den Vorschlag. Das hatte ich auch schon ausprobiert. Stundenlang. Geht nicht wenn es viele Treffer sind. Mit ein paar Stück geht das, aber mit typ 80 Treffern funktioniert das nicht.
Ich habe irgendwo gelesen dass ein String nur 255 Zeichen aufnehmen kann.
Aber den Vorschlägen von Hajo und Daniel funktioniert es auch mit vielen Treffern.
Viele Grüsse und Danke für deine Mühe!
AW: Regina: geht nicht mit vielen Treffern
07.07.2019 17:52:13
Daniel
wobei du bei dieser Methode die Anzahl der Zellen mit
Bereich = Zelle.Address(0, 0)
etwas erweitern kannst, weil dann die Adresse ohne $-Zeichen ausgegeben wird und somit mehr Zellen in die 256 Zeichen passen.
Gruß Daniel
Anzeige
Frage hierzu...
07.07.2019 18:08:42
Werner
Hallo Daniel,
...die sich mir stellt: Ist dir was bekannt, dass es bei Union auch irgendeine Begrenzung gibt?
Gruß Werner
AW: Frage hierzu...
07.07.2019 18:11:11
Daniel
Hi
bis Excel 2003 waren es 8192 Areas (eine Area = ein lückenloser rechteckiger Zellbereich definiert durch zwei Eckzellen), die man in eine Range packen konnte.
Wurde mit Excel 2007 aber deutlich erweitert, nur kenne ich die aktuellen Grenzen nicht.
Gruß Daniel
AW: Frage hierzu...
07.07.2019 18:19:45
Werner
Hallo Daniel,
danke für die Antwort. Das wären dann ja mal zumindest über 8000 Einzelzellen und sollte wohl für "normale Anwendungen" reichen.
Gruß Werner
AW: Frage hierzu...
07.07.2019 18:27:01
Kailash
Werner!
Hab mal etwas ausprobiert:
Habe in meinem Beispiel in über 4 Millionen Zellen das Wort Treffer geschrieben und dann das Makro zum markieren drübergefahren. - Hat funktioniert
Anzeige
AW: Frage hierzu...
08.07.2019 01:22:41
Daniel
HI
die Anzahl der Zellen spielt keine Rolle, entscheidend ist die Anzahl der Areas!
4 Millionen Zellen hätte man auch im alten Excel in eine Rangevariable packen können, sofern diese einen großen zusammenhängenden Zellblock bilden.
dh wenn du hier einen Stresstest machen willst, darfst du nur Zellen in die Range packen, die nicht aneinander angrenzen, sondern z.B. ein Schachbrettmuster bilden:
Range("A1;A3;A5;B2;B5;B6") sind 6 Zellen und 6 Areas
Range("A1:B3") sind auch 6 Zellen, aber nur eine Area und damit für VBA wesentlich unkritischer.
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige