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

Einfügen einer Headerzeile

Einfügen einer Headerzeile
25.05.2014 16:45:07
vba_neuling
Hallo an alle,
ich bin ganz neu hier, konnte mir aber schon ein paar wirkliche hilfreiche Tips für VBA aus diesem Forum holen. Bei einem Problem komme ich allerdings leider nicht weiter, und hoffe dass ihr mir dabei helfen könnt.
Ich habe in einem Worksheet "Tabelle1" eine unbestimmt lange Liste an Namen, denen jeweils ein Raum zugewiesen ist. Die Liste ist derart sortiert:
Spalte| A | B | C
Zeile1|Nachname|Vorname|Raum1
Zeile2|Nachname|Vorname|Raum1
Zeile3|Nachname|Vorname|Raum2
Zeile4|Nachname|Vorname|Raum2
Zeile5|Nachname|Vorname|Raum2
Zeile6|Nachname|Vorname|Raum3
....
Es sind also alles unterschiedliche Vornamen und Nachnamen, aber den ersten zwei Personen ist der gleiche Raum1 zugewiesen, den nächsten drei der Raum2 und der letzten Person Raum3.
Nun möchte ich gerne über der erste Person, der der Raum1 zugewiesen wurde, einen Header einfügen, ebenso über der ersten Person, der der Raum2 zugewiesen wurde und so weiter. Die Anzahl der verschiedenen Räume kann sich ändern!!! Ebenso die Anzahl der Personen die einem Raum zugewiesen wurden. Folglich brauche ich leider auch noch alles dynamisch:(
Das Ergebnis sollte also so ausschauen:
Spalte| A | B | C
Zeile1|Personenliste für den Raum1
Zeile2|Nachname|Vorname|Raum1
Zeile3|Nachname|Vorname|Raum1
Zeile4|Personenliste für den Raum2
Zeile5|Nachname|Vorname|Raum2
Zeile6|Nachname|Vorname|Raum2
Zeile7|Nachname|Vorname|Raum2
Zeile8|Personenliste für den Raum3
Zeile9|Nachname|Vorname|Raum3
Die Räume werden in dem Worksheet "Tabelle2" mit Hilfe eines Makros aufgelistet (in der gleichen Reihenfolge wie in Tabelle1, falls das was hilft):
SpalteA
Zeile1|Raum1
Zeile2|Raum2
Zeile3|Raum3
....
Ich stelle mir also ein Makro vor, dass in Tabelle2 nachschaut, sich den ersten Raum sucht, den Raum mit der Liste in Tabelle1 vergleicht, und dann über den ersten Eintrag mit Raum1 den Header einfügt. Dies soll das Makro solange machen, bis alle Räume aus Tabelle2 abgearbeitet sind. Die Räume, die in Tabelle1 und Tabelle2 vorkommen, sind gleich. Es gibt also nicht in Tabelle2 noch einen Raum4 und in Tabelle1 nicht.
Ich hoffe ich konnte mein Problem einigermaßen klar darstellen.
Freue mich über jede Hilfe!!
VG
vba_neuling

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einfügen einer Headerzeile
25.05.2014 18:05:39
Daniel
Hi
probiere mal das.
Option Explicit
Sub test()
With Sheets("Tabelle2").Cells(1, 1).CurrentRegion
Sheets("tabelle1").Rows(1).Resize(.Rows.Count).Insert
.Copy Destination:=Sheets("Tabelle1").Cells(1, 3)
With Sheets("Tabelle1").Cells(1, 1).Resize(.Rows.Count)
.FormulaR1C1 = "=""Personenübersicht für den : ""&RC3"
.Formula = .Value
End With
End With
Sheets("Tabelle1").Cells(1, 1).CurrentRegion.Sort _
key1:=Sheets("Tabelle1").Cells(1, 3), _
order1:=xlAscending, Header:=xlNo
End Sub

gruß Daniel

AW: Einfügen einer Headerzeile
25.05.2014 22:35:32
vba_neuling
Hallo Daniel,
erst einmal vielen Dank für die schnelle Antwort!
Es würde eigentlich auch super funktionieren, nur habe ich leider das Problem dass die Räume nicht alle sinnvolle Bezeichnungen haben, das heißt ich kann diese nicht wie von dir vorgeschlagen nach der Nummer sortieren lassen:( Vielleicht ein Beispiel, dass das klarer macht: Raum1 heißt AD2343; Raum2 heißt Z3 und Raum3 heißt N2000.
Tut mir sehr leid, dass ich da mit meinem vereinfachten Beispiel Verwirrung gestiftet habe. Und du dir jetzt die Mühe umsonst gemacht hast!
Ich hoffe trotzdem sehr, dass du oder jemand anderes mir nochmal helfen kann.
Vielen Dank schon mal!!!
VG
vba_neuling
PS: Vielleicht kann mir noch jemand die Zeile .FormulaR1C1 = "=""Personenübersicht für den : ""&RC3" erklären was das &RC3 macht? Man weiß ja nie für was man das mal brauchen kann ;-)

Anzeige
AW: Einfügen einer Headerzeile
25.05.2014 23:08:38
Daniel
Ich frage dich, wie du sicherstellt, dass alle Personen, die den Selben Raum haben, auch direkt untereinander stehen, wenn du nicht nach dem Raum sortiert?
Ohne sortieren funktioniert das:
Option Explicit
Sub test()
Dim Zelle As Range
Dim Z As Long
Dim R As String
With Sheets("tabelle1")
Set Zelle = .Cells(1, 3)
Do While Zelle.Value  ""
Z = Zelle.Row
R = Zelle.Value
.Rows(Z).Insert
.Cells(Z, 1).Value = "Personen für: " & R
Set Zelle = .Columns(3).Find(what:=R, _
lookat:=xlWhole, _
searchdirection:=xlPrevious) _
.Offset(1, 0)
Loop
End With
End Sub

die Liste muss allerdings schon soweit nach den Räumen sortiert sein, dass alle Personen für einen raum direkt unter einander stehen.
Das "RC3" ist nur ein Zellbezug auf die Zelle in der selben Zelle in Spalte C.
gruss Daniel

Anzeige
AW: Einfügen einer Headerzeile
26.05.2014 09:23:36
vba_neuling
Hallo Daniel,
wahnsinn! Ich bin total begeistert!! Vielen vielen Dank für deine Hilfe!
Das mit dem Sortieren ist eine gute Frage. Es könnte sein, dass die Einträge gar nicht sortiert werden. Das weiß ich aber in meiner umfassenden Unwissenheit leider gar nicht.
Im Moment ist es so, dass ich aus einer eigentliche schon sortierten Liste, sagen wir mal Tabelle3 mit dem Spezialfilter nach den Räumen in Tabelle2 filtere und diese dann in Tabelle1 geschrieben werden.
-> Sortiert mir der Spezialfilter auch? Warum nicht?
Anschließend geht es dann mit weiteren Listen weiter.
Wenns ok ist, hätte ich noch ein paar Fragen:
Was genau ist Option Explicit und warum kann man das nicht in ein anderes Makro einbinden? Also bei mir jetzt in das, in dem der Spezialfilter und so programmiert ist (bzw.hat das ja offensichtlich eher was mit den Modulen zu tun, oder?)? Weil ich hätte am Ende gerne alles auf einem Button vereint.
Kann man mehrere Module auf einen Button vereinen? Wenn ja, müsste man ja irgendwie die Reihenfolge festlegen, oder?
Tut mir wirklich leid, dass das so ein Desaster ist:(
VG
vba_neuling

Anzeige
AW: Einfügen einer Headerzeile
26.05.2014 12:36:08
Daniel
Hi
der Spezialfilter sortiert noch nicht.
bei meiner ersten Lösung können die Daten unsortiert sein, weil das Makro sie anschließend sortiert
(allerdings müssen die einzlenen Räume in Tabelle2 aufgelistet sein)
meine zweite Lösung geht so vor:
1. nimm den Raum aus der ersten Zeile und füge für ihn eine Überschriftenzeile ein.
2. Suche in der Liste das letzte Vorkommen von diesem Raum.
3. verwende von dieser Fundstelle die nächste Zelle als nächsten Raum und wiederhole damit Schritt 1
dh die Auflistung in Tabelle 2 wird nicht benötigt, aber die Liste muss so erstellt sein, dass es für jeden Raum nur einen Zellblock gibt, welcher nicht durch Zeilen von anderen Räumen unterbrochen ist.
zum Thema Option Explicit:
die Anweisung Option Explicit über einem Modul berirkt, dass du alle verwendeten Variablen mit DIM deklarieren musst.
Das ist enorm hilfreich weil du dann tippfehler bei Variablenbenennungen sofort angezeigt bekommst und dich nicht über seltsame Ergebnisse wundern musst.
Weitere Infos dazu hier: http://www.online-excel.de/excel/singsel_vba.php?f=4
Auf der Seite findest du sicherlich noch den einen oder anderen nützlichen Hinweis für das Arbeiten mit VBA und Excel.
Gruß Daniel

Anzeige
AW: Einfügen einer Headerzeile
26.05.2014 18:21:12
vba_neuling
Hallo Daniel,
ok verstehe. Das hilft ja schon mal viel weiter, wenn man weiß was der Code eigentlich macht. Das erklärt auch, warum es nicht mehr geht, wenn man ganz unten nochmal den gleichen Raum anfügt.
Dann werde ich jetzt mal noch ein bisschen rumprobieren:-)
Gibts zufällig einen einfachen Codeschnippsel, der sortiert, aber halt nur nach "gleichem" und nicht nach Nummer oder alphabetisch?
Ansonsten bedanke ich mich recht herzlich für die gute und schnelle Hilfe!
VG
vba_neuling

AW: Einfügen einer Headerzeile
26.05.2014 23:00:39
Daniel
naja, nach irgendwas muss die Sortierfunktion sortieren.
du kannst irgendwo Listen für bestimmmte Reihenfolgen ablegen (benutzerdefinierte Sortierreihenfolge), aber das dürfte etwas zu kompliziert sein.
eine Möglichkeit wäre folgende:
schreibe in die Spalte D die Formel: =vergleich(c1;c:c;0) und ziehe sie nach unten.
die Formel gibt diemdie Zeilennummer des ersten auftretens in der Liste und damit kannst du dann nachträgliche Einfügungen einsortieren, ohne die Ursprungsreihenfolge durcheinander zu werfen.
oder du listest in einer zweiten Tabelle die Räume in der gewünschten Reihenfolge auf und spielst wieder in der namensliste diese Reihenfolge mit: =vergleich(c1;Tabelle2!A:A;0) die Reihenfolgenummer zu, nach der du dann sortieren kannst.
gruss daniel
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige