Anzeige
Archiv - Navigation
1064to1068
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

String in gefilterter Liste kopieren

String in gefilterter Liste kopieren
08.04.2009 11:34:22
Werner
VBA-Level: befriedigend
Hallo Freunde,
in Spalte A eines Worksheet stehen einige tausend Strings. Mit dem Automatikfilter
filtert man eine Teilmenge davon heraus. Anschließend versucht man in dieser Spalte Strings
zusammenzulegen, und zwar so, dass jeweils der String in Spalte A derjenigen Zeile, in der sich die aktive
Zelle befindet, innerhalb einer Zelle weiter oben in Spalte A hinter den in dieser Zelle enthaltenen String kopiert und dann die Zeile, in der sich der kopierte String befindet, gelöscht wird. Der Inhalt zweier
Zellen soll also zusammengelegt werden.
Wären die Einträge in Spalte A nicht gefiltert, würde das recht einfach sein: Mit "Input" eine Abfrage einbauen, um wieviele Zeilen nach oben der String verlegt werden soll und dann den String mit "Cells(ActiveCell.Row - Abfrageergebnis, 1).Value " verketten, anschliessend die ActiveCell.Row mit dem String löschen.
Erreicht werden soll jedoch, dass, wenn der Benutzer auf die Input-Abfrage z.B. "2" eingibt, der String
zu dem String in der Zelle in Spalte A hinzuaddiert wird, die genau zwei sichtbare Zeilen über der Zeile liegt, in der sich die aktive Zelle befindet. Dazwischen kann natürlich eine unbestimmte Anzahl ausgefilterter, nicht
sichtbarer Zellen liegen.
In einem zweiten Schritt soll noch erreicht werden, dass das Kopieren des Strings nicht nur in Richtung
nach oben, sondern auch nach unten funktioniert.
Wie macht man das? Geht das irgendwie mit "xlVisibleCells"?
Wer weiss Rat? Bin mal gespannt... Werner R.

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String in gefilterter Liste kopieren
08.04.2009 12:52:11
Oberschlumpf
Hi Werner
Versuch mal das hier:
https://www.herber.de/bbs/user/61077.xls
Da von dir keine Bsp-Datei gezeigt wurde, habe ich nur Werte in Spalte A eingetragen und dort eben den Autofilter aktiviert.
Wenn du nun einen Wert aus dem Filter auswählst und dann in eine Zelle in Spalte A klickst, wirst du...
...zuerst gefragt, ob der Eintrag der ausgewählten Zelle nach oben verschoben werden soll
(bei Nein wird der Wert nach unten verschoben)
...im nächsten Schritt erfolgt dann die Frage, um wieviele (sichtbare) Zeilen der Wert verschoben werden soll
...nach Eingabe einer Zahl wird dann der Wert in der Zeile entsprechend weiter oben oder unten um den Wert aus der aktiven Zelle erweitert und der Inhalt aus aktive Zelle wird gelöscht
Mein Code wird nur dann gestartet, wenn auch wirklich aus dem Autofilter eine Auswahl erfolgt.
Werden laut Autofilter alle Zeilen angezeigt, dann kein Codestart.
Hilft es?
Ciao
Thorsten
Anzeige
erster Test positiv!
08.04.2009 13:34:10
Werner
Hallo Oberschlumpf,
der erste Test deines Codes war recht positiv: Ich habe aus dem Filter "Sonntag" ausgewählt, da waren
dann unter anderem die Zeilen 64, 71, 78, 85, 92 und 99 eingeblendet.
Dann habe ich "Sonntag" aus Zeile 99 ausgewaehlt und als Verschiebeparameter "3" eingegeben.
Tatsaechlich erschien "Sonntag dann 3 Zeilen weiter oben.
In der Praxis enthalten meine Zellen ganze Sätze, und gefiltert wird nach Teilstrings. Die Einträge in den
Spalten sehen also nicht alle gleich aus. Aber das Prinzip ist dasselbe
Besten Dank!! Das Problem mit dem Filtern hatte mich schon lange geplagt.
Morgen früh versuche ich noch den Code im einzelnen zu analysieren und einzubauen
(wir haben hier schon Abend). Beste Grüße! Werner R.
Anzeige
Funktioniert problemlos!
09.04.2009 04:18:20
Werner
Hallo Oberschlumpf,
inzwischen konnte ich deinen Code anpassen, und alles funktioniert wunderbar. Nochmals vielen herzlichen Dank!!
Die entscheidende Zeile ist die Zeile
If Rows(loSuche).RowHeight groesser als 0 Then...
(Ich habe "groesser als" geschrieben, nachdem das Herber-System das Groesser-als-Zeichen nicht
angenommen hat.)
Ausgefilterte Zeilen haben offenbar eine "RowHeight" von null, werden also durch diese If-Abfrage
übersprungen. Darauf wäre jedenfalls ich nicht so ohne weiteres gekommen. Aber auch wenn keine
Zeilen ausgefiltert sind, funktioniert der Code.
Ich habe nach
lowert = Val(lstrAnzZeile)
noch die If-Abfage
If lowert = 0 Then Exit Sub
eingebaut, denn in deiner Version des Codes wird der Ausgangs-Range auch dann gelöscht, wenn
der String in dem Range gar nicht umgestellt wurde. Aber das ist nur eine Kleinigkeit.
Diesen Code kann ich sicherlich wiederholt nutzen und unterschiedlich anpassen! Beste Grüße! Werner R.
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige