Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1280to1284
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

Alle folgenden Zellen markieren, bis leere kommen.

Alle folgenden Zellen markieren, bis leere kommen.
06.10.2012 18:29:45
T.
Hallo Ekschpärt`n,
Frage an euch: Von einer aktiven Zelle aus sollen alle danach folgenden, in denen ein Wert enthalten ist, solange markiert werden, bis zwei aufeinanderfolgende leere Zellen kommen.
Also beispeilsweise von A1 ab bis A9 durchmarkieren (neun Zellen markiert), um diese zu sortieren und A10 und A11 nicht mehr in die Markierung miteinbeziehen, da diese vorerst leer sind. Falls später in die Zellen A10 und A11 etwas reingeschrieben wird, sollen diese beiden Zellen beim nächsten Markierungsvorgang natürlich mitberücksichtigt werden.
Klar soweit?
@_@
Wie kann ich das per Makro realisieren? Ich gehe mal davon aus, daß eine If Schleife nötig ist, welche von der ersten aktiven Zelle an prüft, ob in den folgenden etwas enthalten ist oder nicht und das dann solange macht, bis zwei leere Zellen gefunden werden (das mit den zwei aufeinanderfolgenden leeren Zellen hat einen ganz bestimmten Grund).
Geht das mit IsEmpty - Then - GoTo?
Ich sage schon mal vielen herzlichen Dank für Vorschläge usw.
Ô_Ô

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle folgenden Zellen markieren, bis leere kommen.
06.10.2012 18:31:40
Hajo_Zi
Du schreibst was von sortieren, dazu ist eine Markierung nicht notwendig. Excel erkennt die Tabelle.

AW: Alle folgenden Zellen markieren, bis leere kommen.
06.10.2012 18:49:38
T.
Die Markierung ist durchaus nötig. Glaube mir...

AW: Alle folgenden Zellen markieren, bis leere kommen.
06.10.2012 19:07:26
Hajo_Zi
Gut Du siehst Deine Datei und hast bestimmt mehr Erfahrung als ich.
Gruß Hajo

Beispiel - Sortieren ... ihr habt beide Recht.
07.10.2012 11:51:33
Matthias
Hallo
1 - Excel erkennt automatisch zusammenhängende Bereiche.
2 - Man muss also nichts markieren außer eine Zelle im Bereich.
3 - Das ist aber so nur mögl. wenn die angrenzenden Spalten mitsortiert werden sollen.
Somit habt ihr also beide Recht, da wahrscheinlich jeder eine andere Situation meint.
Ich habe mal ein Bsp. erstellt, in dem ich das (so hoffe ich) verdeutlichen kann.
https://www.herber.de/bbs/user/82013.xls
Über eine Rückmeldung würde ich mich freuen
Gruß Matthias

Anzeige
AW: Beispiel - Sortieren ... ihr habt beide Recht.
07.10.2012 14:15:27
T.
Hey Matthias,
zunächst ein dickes Danke. Finde ich echt nett von Dir, daß Du Dir so viel Mühe gemacht hast.
Und das Ergebnis ist wirklich beeindruckend.
Allerdings habe ich einen Fehler gemacht. Und zwar in der Beschreibung des Problems.
In Deinem Makro gehst Du - meiner fälschlichen Darstellung zufolge natürlich zu Recht - davon aus, daß es sich immer um die gleichen Zellen handelt. Dem ist nicht so. Es handelt sich um eine fortlaufende Tabelle, welche ständig ergänzt wird. A1 (in diesem speziellen Fall B7) ist schon sehr lange passé. Sorry. Das war`s, was ich falsch beschrieben hatte.
Es ist also so, daß die Ausgangszelle immer variabel ist. Momentan steht der erste Wert in Zelle B863, daß derzeitige Ende der zu sortierenden Werte befindet sich in Zelle B883. Das kann sich aber ändern. Und zwar, indem etwas hinzugefügt oder aus dem bestehenden Datensatz herausgenommen wird. Dann entsteht eine leere Zelle innerhalb des ganzen Blocks. Deshalb auch die Sache mit den zwei aufeinanderfolgenden Leerzellen. Das ist eine der Erklärungen dafür. Die andere ist, daß eben bei erreichen von zwei Leerzellen nicht weiter geprüft werden soll. Stichwort hierbei: Ende des Datensatzes. Was die Markierung der Ausgangszelle betrifft (derzeit B863), also der Zelle, von der aus die Sortierung des aktuellen Datensatzes erfolgen soll, so ist diese notwendig, da eben nur das, was unterhalb der Ausgangszelle plus dieser steht, sortiert werden soll, und nicht die ganze Tabelle mit allen belegten Zelle oberhalb der Ausgangszelle. Nur der jeweilige Datensatz (momentan B863 bis B883) soll komplett markiert und danach in sich selbst sortiert werden.
Ich hoffe, das ist jetzt nicht zu kompliziert zu verstehen.
Dein Makro, wie gesagt, macht das soweit alles richtig. Nur A1 stimmt eben noch nicht.
Sub Sort_A() Dim x% For x = 1 To ActiveSheet.UsedRange.Rows.Count If Cells(x + 1, 1) = "" And Cells(x + 1, 1) = "" Then Exit For Next Range("A1:A" & x).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom End Sub Ich kann das >Range("A1:A"Range("A1") Vielleicht kannst Du mir in diesem Punkt noch helfen. Ich denke, dann dürfte alles okay sein.
Bis dann...
@_@

Anzeige
AW: Beispiel - Sortieren ... ihr habt beide Recht.
07.10.2012 15:44:48
Gerd
Hallo
Sub b()
Dim x%
With ActiveCell
For x = .Row To ActiveSheet.UsedRange.Rows.Count
If Cells(x + 1, .Column) = "" And Cells(x + 2, .Column) = "" Then Exit For
Next
.Cells.Resize(x - 1).Sort Key1:=.Cells, Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
End Sub

AW: Beispiel - Sortieren ... ihr habt beide Recht.
07.10.2012 16:22:54
T.
Hey Gerd,
vielen Dank. Das war genau das, was ich suchte. Funktioniert einwandfrei.
Schönen Tag noch...
@_@

Vorsicht !!!
07.10.2012 17:38:43
Matthias
Hallo
Das hat Gerd sicher nicht intensiv genug getestet
Folgend Situation:
Tabelle1

 AB
19587
27721
37623
46543
55244
63352
71358
81162
9767
1072
1149
12  
13  
143217
152684
16  
17  
18  
19  
20  
21  
22 55
23182


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4


Nun markiere bitte mal die Zelle B11 und nun sortiere mit Gerd seinem Vorschlag.
Ergebnisauszug aus der Tabelle
Tabelle1

 AB
1072
1149
12 17
13 84
1432 
1526 
16  


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Uuhps ... wirklich so gewollt ?
Gruß Matthias

Anzeige
weiteres Bsp...
07.10.2012 17:53:08
Matthias
Hallo
Tabelle1

 AB
9767
1079
1142
12  
13  
14321
152684


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Markiere B10 und sortiere
Ergebnisauszug:
Tabelle1

 AB
9767
1079
1141
12 2
13 84
1432 
1526 


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Wenn das wirklich alles so gewollt ist, dann ist es ja ok.
Ich wollte nur darauf hinweisen falls es noch niemand bemerkt hat.
Gruß Matthias

Anzeige
AW: Hi Matthias!
07.10.2012 18:03:56
Gerd
Du kannst gerne noch auf DAU umprogrammieren. Bei Noname-Fragestellern mache ich dies sowieso nicht.
Gruß Gerd

@Gerd
07.10.2012 18:16:26
Matthias
Hallo Gerd
Ich wollte Dir nicht zu nahe treten. Tut mir leid wenn Du es als Kritik aufgefasst hast,
Das war nicht meine Absicht!
Gruß Matthias

AW: Hi Matthias!
07.10.2012 18:17:52
T.
Es sind bei Dir also nur Leute einer Antwort wert, die nicht unter die Kategorie "No Name" fallen? Seltsam, daß Du Dir dann überhaupt die Mühe gemacht und Matthias` Makro überarbeitet hast.
Ach, übrigens, die Bezeichnung >DaU Wie auch immer, lassen wir`s gut sein.
Alle sind zufrieden und dieser Thread kann geschlossen werden.
Oh, und bevor ich es vergesse, T. steht durchaus für einen Namen.
Nur keine Sorge, Gerd.
@_@

Anzeige
AW: Vorsicht !!!
07.10.2012 18:05:34
T.
Hey Matthias,
schön, daß Du Dir noch einmal Gedanken gemacht hast. Ich kann Dich aber beruhigen; es funktioniert perfekt. Es ist ja so, daß die Werte letztlich immer nur in der Spalte B eingetragen werden. Daher passiert das nicht, was Du befürchtest. Ich sortiere immer nur Werte, die sich in Zellen der Spalte B befinden. So, wie ich es vorhin aufgelistet hatte. B863 bis beispielsweise B883. Also kann das, auf was Du hinweist, nicht vorkommen. Trotz alledem vielen Dank, daß Du es noch gepostet hast.
Noch etwas. Klar, wenn ich innerhalb des Datensatzes markiere und dann sortiere, wird alles, was oberhalb der markierten Zelle liegt, ausgelassen. Das ist aber genauso beabsichtigt.
Hat alles sein Sinn und Zweck. Auch, wenn`s etwas seltsam erscheint.
Ô_Ô
Nochmals Danke an alle und bis die Tage...

Anzeige
noch was
07.10.2012 20:20:46
Erich
Hi Vorname, (zu Vornamen und Nicknames schau bitte mal in die Forums-FAQ )
Zitat:

NickNames sind nicht erwünscht.
Diese Frager werden bei der Beantwortung nicht gerade bevorzugt behandelt.
Nenne Deinen Vornamen, damit man Dich ansprechen kann.
Schau dir mal diese Mappe an:
https://www.herber.de/bbs/user/82017.xls
Vielleicht kannst du daraus noch etwas gebrauchen.
Noch eine Bemerkung zu UsedRange.Rows.Count:
Das eignet sich nur als Schleifenende, wenn UsedRange in Zeile 1 beginnt - das muss aber nicht sein.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: noch was
07.10.2012 21:08:50
T.
Hey Erich,
T. ist lediglich die Abkürzung meines Namens. Ist das auch nicht erlaubt? Hmm...
UsedRange fängt definitiv nicht mehr in Zeile 1 an. Es funktioniert aber dennoch. Und zwar so, wie ich es mir vorstellte.
Wie sagt schon the englisch Man so treffend in solchen Fällen? Never change a running System.
@_@
Es geht und damit ist doch alles prima.
Das einzige, was ich nicht verstehe, ist, daß die Zeilenmarkierung nicht dargestellt, also nicht sichtbar ist. Auch dann nicht, wenn ich das Makro mit F8 durchlaufen lasse.
Aber das ist nur eine Randerscheinung.
Wünsche euch allen `ne gute Zeit.
◤_◥
Servus.
T.

Anzeige
PS.:
07.10.2012 21:12:56
T.
Werde mir Dein File ansehen, Erich. Vielen Dank schon mal. Werde Dir dann Bescheid geben...

Keine Markierung
08.10.2012 01:13:57
Erich
Hi fast Unbekannter (oder Tee?),
"Nenne Deinen Vornamen, damit man Dich ansprechen kann." ist eine freundliche Aufforderung,
die Hans W. Herber, der Betreiber dieses Forums, äußert. Du kannst dem nachkommen oder auch nicht.
Und die kannst Antworten bekommen oder nicht...
Zu:
"UsedRange fängt definitiv nicht mehr in Zeile 1 an. Es funktioniert aber dennoch...":
Ich weiß nicht, was du dir da vorstellst, aber das stimmt einfach nicht.
Lass doch mal in irgend einer Mappe das folgende Makro laufen. Es erstellt ein neues Blatt,
das du danach einfach wieder löschen kannst.
Das Makro zeigt dir, wie hier deine For-Schleife liefe (beser: nicht liefe):

Sub UsedRange_Schleife()
Worksheets.Add
Cells(10, 2).Resize(2, 4) = "X"
Cells(9, 1).Select
Cells(10, 4) = ActiveCell.Row & " To " & ActiveSheet.UsedRange.Rows.Count
Cells(11, 4) = ActiveSheet.UsedRange.Address(0, 0)
MsgBox "For lngZeile = " & Cells(10, 4)
End Sub
Zu
"was ich nicht verstehe, ist, daß die Zeilenmarkierung nicht dargestellt, also nicht sichtbar ist":
Das mag daran liegen, dass überhaupt nicht markiert wird. Da haben Hajo und dia anderen völlig recht:
Für den Sort (wie für die meisten anderen Aufgaben) ist Markierung (Select) überflüssig, meist eher störend.
Daran ändert es auch nichts, wenn du schreibst: "Die Markierung ist durchaus nötig. Glaube mir..."
In dieser Sache glaubt dir hier (hoffentlich) niemand. :-)
Wenn man einen Bereich sortieren will, schreibt man Bereich.Sort..., das ist geschickter als
Bereich.Select
Selection.Sort...
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Keine Markierung
08.10.2012 13:12:23
T.
Hey Erich,
Du kannst es mir glauben oder auch nicht - Es funktioniert wirklich so, wie ich es mir vorstellte.
Ich sehe ja, was ich sehe. Und die Daten werden exakt so bearbeitet, wie ich das wollte.
Okay, zugegeben, Markierung ist nicht unbedingt nötig. Stimmt. Allerdings muß laut Excel wenigstens eine Zelle der zu sortierenden Liste markiert, also angeklickt sein, damit der Sortierungsvorgang überhaupt startet. Darin sind wir uns einig, oder?
Meine Liste ist mittlerweile fortlaufend von Zelle B7 bis Zelle B884 beschrieben. Da ich aber immer nur die aktuellen letzten Zellen der Liste bearbeitet sprich sortiert haben möchte, muß ich eben die jeweils erste Zelle der aktuellen Teil-Liste markieren. Und dann macht das Makro genau das, was ich mir ursprünglich vorgestellt habe.
That`s all.
Also was bitte ist denn so schlimm und so unverständlich daran? Man sollte sich doch freuen, wenn hier jemand einem anderen hilft und das dann auch noch ohne Probleme geht.
So zumindest sehe ich das.
Und damit Du siehst, daß ich es kann, findest Du gleich anschließend auch noch meinen Namen.
Wünsche Dir einen schönen Tag.
Bis denn...
Teddy

ich möchte das klarstellen !!
08.10.2012 16:08:13
Matthias
Hey Teddy
Erich hat aber wirklich Recht !!
Glaub mir!
Mit ActiveSheet.UsedRange.Rows.Count war ich zu vorschnell.
Mach bitte Folgendes(wirklich so wie ich es Dir schreibe !)
Erstelle bitte eine neue Mappe mit 2 Tabellen
In Tabelle1 schreibst Du bitte ab A1 bis A10 irgendwelche Werte.
In Tabelle2 schreibst Du bitte ab A2 bis A10 irgendwelche Werte. Die Zelle(A1) lässt Du bitte in Ruhe!!!
Und nun ein Modul mit folgendem Code:
Sub GlaubsRuhig()
MsgBox ActiveSheet.UsedRange.Rows.Count
End Sub
Wechsle in die Tabelle1 und starte das Makro. Du erhälst als Ergebnis 10
Wechsle in die Tabelle2 und starte das Makro Du erhälst als Ergebnis 9
Nun wirst Du feststellen, das Erich tatsächlich Recht hat.
Das Phänomen(was keins ist) täuscht Dich !!
Wenn Du nun in Tabelle2 die Zelle(A1) einfärbst und dannach wieder "entfärbst"
und das Makro nochmal startest erhälst Du nun auch als Ergebnis 10
Warum ist das so ?
UsedRange ist der benutze Bereich der Tabelle
Ist die Tabelle also neu und Du beginnst in A2 tritt der Effekt ein den Erich versucht hat Dir zu erklären. Dann beginnt UsedRange in A2
ActiveSheet.UsedRange.Rows.Count ist dann die letzte Zeile im UsedRange
Somit wäre A2 die Zeile(1) im UsedRange und A10 ware die Zeile(9)
Sobald Du einmal die Zelle(A1) mit einbezogen hast (das hast Du anscheinend in Deiner Tabelle einmal getan - egal in welcher Form), dann gehört die Zelle mit zum UsedRange
Ich hoffe ich könnte das aufklären.
Gruß Matthias

Gar keine Markierung nötig
08.10.2012 17:04:35
Erich
Hi Teddy, :-)
zur UsedRange hat dir Matthias ja schon alles geschrieben. :-)
Zu
"Allerdings muß laut Excel wenigstens eine Zelle der zu sortierenden Liste markiert,
also angeklickt sein, damit der Sortierungsvorgang überhaupt startet. Darin sind wir uns einig, oder?"
:
Ja, das ist in Excel so, weil der Benutzer ja irgendwie zeigen muss, welcher Bereich sortiert werden soll.
Und ja, wenn er eine einzelne Zelle markiert, wird der Bereich drumherum (AktuellerBereich oder CurrentRegion) sortiert.
Aber - und da sind wir uns dann doch wieder nicht einig:
Wenn du in VBA die Sort-Methode nutzen willst, musst du angeben, für welches Objekt das geschehen soll.
Das Objekt muss ein Bereich, ein Range sein, z. B. Selection oder Range("B4:D100") oder Cells(4,2).Resize(97,3).
Welche Zellen zu dem Zeitpunkt gerade markiert sind, speilt (außer in dem ungeschickten Spezialfall Selection)
überhaupt keine Rolle.
Mann kann, wenn Sheets("Tabelle1") aktiv ist, quasi im Hintergrund in einem anderen Blatt sortieren lassen:
Sheets("Tabelle2").Range("B4:D100").Sort...
Wo sich ein Cursor in Tabelle2 befindet, spielt keine Rolle.
Fazit: Du musst die Methode Sort für den zu sortierenden Bereich aufrufen,
dazu musst du die erste und die letzte Zeile dieses Bereichs kennen oder ermitteln.
Markieren musst du nichts.
Das zeigt dir auch der Sort in meiner Beispielmappe.
Zu
"Man sollte sich doch freuen, wenn hier jemand einem anderen hilft und das dann auch noch ohne Probleme geht."
Ich denke, das tue ich. Was veranlasste dich zu dieser Frage?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Wenn ich das geahnt hätte, ...
09.10.2012 19:26:17
T.
hätte ich nicht um Hilfe gebeten.
Kleiner Scherz.
Ô_Ô
Leute, ich lade euch jetzt die Datei, um die es hier geht, hoch.
https://www.herber.de/bbs/user/82041.xls
Ihr schaut euch bitte B7 bis B35 an (entspricht in der Originaldatei dem Range B863 bis B891 - ich habe das, was wichtig ist, in eine neue Datei kopiert). Dieser Range ist der aktuelle.
Ihr fügt in Zelle B36 ein a ein, markiert (klickt an) die Zelle B7, dann laßt ihr das Makro "Sortieren" laufen. Danach fügt ihr in die Zelle B37 ein b ein, markiert erneut die Zelle B7 und laßt das Makro nochmals laufen. Wenn ihr jetzt nicht in B7 ein a und in B15 ein b seht, stimmt bei euch etwas nicht. Jetzt löscht ihr das b (B15) wieder, markiert wieder die Zelle B7 (oder laßt die Zelle B15 markiert - ist egal) und startet das Makro. Das gleiche macht ihr nun noch mit dem a (B7) und jetzt sollte die Liste wieder aussehen wie am Anfang.
Das ist es, was dieses Makro tun soll. Nicht mehr, nicht weniger. Es soll eine Anzahl von Zellen durchsuchen, ob irgendwann zwei aufeinanderfolgende Leerzellen kommen, was normalerweise nur am Ende der jeweils zu sortierenden Liste der Fall sein sollte, da danach ja erstmal nichts mehr steht. Aber selbst, wenn innerhalb der Liste zwei Einträge gelöscht werden, funktioniert das Makro immer noch. Es stoppt dort nämlich und sortiert. Und zwar richtig.
Das ist alles.
Warum könnt ihr nicht akzeptieren, daß es funktioniert? Ihr habt mir mit eurem Wissen geholfen. Das Ding geht. Es macht das, was ich will.
Und mehr ist nicht nötig.
Ich danke euch beiden, daß ihr euch wegen dieser Sache so dermaßen das Hirn verbiegt.
Aber Leute, daß ist nicht nötig. Wirklich nicht.
Es klappt doch.
@_@
Schöne Grüße
Teddy

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige