viewpoint
Goto Top

Nach Spalteninhalt gruppieren

Abhängig des Inhaltes einer Zelle die Zeilen gruppieren

Hallo!

Ich habe ein Excel Sheet mit etwa 24TSD Zeilen. in der ersten Spalte steht immer eine Nummer nach der ich gruppieren will. Allerdings haben die Nummern immer unterschiedlich viele Zeilen (stehen untereinander).

Ich will nun mit, z.B. einem Makro, sämtliche Zahlen (Im konkreten Fall Arbeitsauftragsnummern) gruppieren.

Wie ist das zu realisieren?

Danke!

Content-Key: 68652

Url: https://administrator.de/contentid/68652

Ausgedruckt am: 28.03.2024 um 23:03 Uhr

Mitglied: bastla
bastla 15.09.2007 um 15:24:59 Uhr
Goto Top
Hallo viewpoint!

Reichen für Deinen nicht genannten weiteren Verwendungszweck die Möglichkeiten von "Daten / Teilergebnisse..." nicht aus?

Grüße
bastla
Mitglied: viewpoint
viewpoint 17.09.2007 um 13:31:27 Uhr
Goto Top
Hi!

Naja - hier werden Zeilen mit Zwischenergebnissen eingefügt.

Im Klartext:
Ich habe eine Liste in der Arbeitsscheinnummern, Erstellt-Datum, Meldung, Rückmeldung, Kosten, etc. stehen.
Einige Arbeitsscheinnummern bestehen aber aus mehreren Zeilen (wenn die Arbeiten an verschiedenen Tagen gemacht wurden). Nun will ich in diesen Fällen die Arbeitsscheinnummern gruppiert haben.

Wenn dazwischen Zeilen eingefügt werden, ist das eigentlich nicht brauchbar face-sad
Mitglied: bastla
bastla 17.09.2007 um 16:10:53 Uhr
Goto Top
Hallo viewpoint!

Was verstehst Du eigentlich unter "Gruppierung"? Auch die Gruppierungsfunktion von Excel ("Daten / Gruppierung und Gliederung / Gruppierung..." benötigt ja irgendeine "Zwischenzeile" (Kopf oder Fuß).

So gesehen sieht Dein Vorhaben für mich derzeit eher nach "Sortierung" aus.

Grüße
bastla
Mitglied: viewpoint
viewpoint 17.09.2007 um 17:53:04 Uhr
Goto Top
Hi!

Man braucht schon eine Zwischenzeile - und zwar die letzte Zeile der einzelnen Auftragsnummern da in diesem alle Aktionen der vorangegangenen Aktionen sind.

Beispiel: 3x die Auftragsnummer 55000
In der ersten Zeile steht, dass ein Techniker 30 Minuten dort war und sich das angesehen hat.
Zweite Zeile auch mit Auftragsnummer 55000 wo steht, dass der Techniker am Vortag 30 min dort war und nun begonnen hat, etwas zu machen.
Die dritte Zeile hat auch die Auftragsnummer 55000 wo ebenfalls steht, dass er 30 minuten dort war, dann begonnen hat mit der Arbeit und nun das fertig gestellt hat.

Ich will nun nur noch die letzte Zeile sehen wo eben alles zusammen geführt steht. Der Rest soll entweder gruppiert werden oder ganz ausgeblendet wird.

Manchmal hat ein Auftrag nur eine Zeile, manchmal 5 oder bis zu 20.
Mitglied: bastla
bastla 18.09.2007 um 16:52:54 Uhr
Goto Top
Hallo viewpoint!

Versuch es mal mit dem folgenden VBA-Programm:
Sub Gliederung() 'Dieses Sub zum Starten verwenden!  
r = 4 'erste Zeile mit Daten  
st = r
PANr = ""  
Do While Cells(r, 1).Value <> ""  
    ANr = Cells(r, 1).Value
    If ANr <> PANr Then
        Gliedern st, r
        st = r
    End If
    PANr = ANr
    r = r + 1
Loop
Gliedern st, r
End Sub

Sub Gliedern(st As Integer, r As Integer)
If st < (r - 1) Then
    Range(Rows(st), Rows(r - 2)).Rows.Group
End If
End Sub
Die Startzeile (im Beispiel 4) musst Du natürlich Deinen Gegebenheiten anpassen.

Um sinnvoll gruppieren zu können, ist zunächst eine Sortierung erforderlich, welche Du vorweg selbst vornehmen solltest, da nur Du die Kriterien dafür kennst. Wenn Du den Sortiervorgang als Makro aufzeichnest, lässt sich dieser dann auch leicht in das Programm einbauen.

Gestartet wird über das Sub "Gliederung" (Hauptprogramm). Das Sub "Gliedern" ist für das eigentliche Zusammenfassen zuständig und wird vom Hauptprogramm selbst aufgerufen.

Es werden alle Zeilen durchlaufen, bis eine Zeile mit leerer Spalte A gefunden wird - da Du die Datenzeilen ja ohnehin zusammenhängend hast (und behalten willst), schien mir das der sinnvollste und flexibelste Weg.

Nicht berücksichtigt ist derzeit (für Excel <= 2003) die Möglichkeit , dass das Tabllenblatt bis zur Zeile 65536 gefüllt sein könnte.

Grüße
bastla
Mitglied: viewpoint
viewpoint 19.09.2007 um 10:10:44 Uhr
Goto Top
Hi!

Besten Dank!

Wenn ich das Makro nun aufrufe, sagt er mir "Argumenttyp ByRef unverträglich" und markiert den Aufruf "Gliedern" im Hauptprogramm.
Mitglied: bastla
bastla 19.09.2007 um 13:30:03 Uhr
Goto Top
Hallo viewpoint!

Ersetze das Sub "Gliedern" durch folgende Version:
Sub Gliedern(S As Integer, Z As Integer)
If S < (Z - 1) Then
    Range(Rows(S), Rows(Z - 2)).Rows.Group
End If
End Sub

Grüße
bastla