Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

automatische Gruppierung einer Tabelle, wenn in Spalte B ein Wert steht





Frage

Hallo Excelianer, ich habe folgendes Problem: In einer umfangreichen Tabelle stehen in Spalte A aufsteigend Werte von 1 bis 500. Die Bereiche müssen in unterschiedlichen, nicht identischen Stückelungen zusammengefaßt werden. Z.B. von 1-10, von 11-15, von 16-29 etc. In Spalte B wird dann der Wert eingetragen, bis zu dem dieser Wertebereich geht. In den Spalten A und B stehen also quasi die von/bis-Werte nebeneinander. Ich möchte nun die einzelnen Zeilen ausblenden, die innerhalb eines solchen Wertebereichs liegen, also in dem o.a. Beispiel die Zeilen mit 2-10 in Spalte A. Dazu möchte ich diese mit der Gruppierung eine Ebene nach unten stufen. Das soll nun nach Möglichkeit nicht mehr "zu Fuss", sondern mit einem Makro ablaufen. Ich kriege es aber immer noch nicht hin, mit VBA die Bedingung (ob in Spalte B was steht) einzubauen und das Makro nur bis zum Tabellenende laufen zu lassen. Vielleicht opfert sich ja ein VBA-Experte. Ich schick dafür dann bei Bedarf eine Super-Formel-Sammlung zu ;-))) CU want2cu

Antwort 1 von Guenter

Hallo Klaus,

ich "opfere" mich mal.
Hier ein kleines Makro, das Du mal ausprobieren kannst:

Option Explicit

Sub test()
  Dim i As Integer
  Dim n As Integer
  Dim Gruppe As Integer
  i = Cells(Rows.Count, 1).End(xlUp).Row
  
  For n = 1 To i
    Gruppe = Cells(n, 2).Value
      If Gruppe > 0 Then
        Range(Cells(n + 1, 2), Cells(Gruppe, 2)).Select
        Selection.Rows.Group
      End If
  Next
End Sub


Schreib doch mal, ob es das schon war oder ob noch weiter gemacht werden muss.

Gruß
Günter

Antwort 2 von want2cu

Hallo Günter,

zunächst mal ganz herzlichen Dank für deine Hilfe.
Ich habe den Code kopiert und erhalte beim schrittweisen Testen folgende Fehlermeldung:

Laufzeitfehler 13: Typen unverträglich.

Wenn ich auf die Schaltfläche TESTEN der Infobox klicke, springt dei gelbe Markierung auf folgende Zeile:

Gruppe = Cells(n, 2).Value

Wäre nett, wenn du mir da noch mal weiterhelfen könntest.

Im Voraus schon vielen Dank!

CU
want2cu

Antwort 3 von Guenter

Hallo Klaus,

nimm mal bei folgender Zeile etwas weg:

Dim Gruppe As Integer

nur
Dim Gruppe

Sind Deine Zahlen in Spalte B > 32768?

Gruß
Günter

Antwort 4 von want2cu

Hallo Günter,

es klappt leider immer noch nicht.
Jetzt hängt er bei der Zeile :

If Gruppe > 0 Then

mit derselben Fehlermeldung wie oben beschrieben.

<seufz>

Was mache ich falsch? (ausser, dass ich immer noch mein VBA-Buch für Excel nicht durchgearbeitet habe?)

Die Zahlen in Spalte B sind <3000

CU
want2cu

Antwort 5 von Guenter

Hallo Klaus,

dann sieht es so aus, als ob Deine Spalte B auch Text enthält.

Ich bin davon ausgegangen, dass Deine Spalte B reine Zahlen enthält. Ich habe dazu eine Beispieltabelle nach Deinen Angaben in der Frage konstruiert. Diese Beispieltabelle kann ich Dir gerne schicken.

Gruß
Günter

Antwort 6 von want2cu

Hallo Günter,

sorry, dass meine Angaben nicht ganz vollständig waren. Ich hätte mir ja denken können, dass es für VBA wesentlich ist, wo das Makro anfangen soll.

Die eigentlichen Zahlen beginnen erst in Zeile 3, in Zeile 1 und 2 stehen Spaltenüberschriften.

Es handelt sich um ein alfabetisches Raster, bei dem zu jeder Zahl (beginnend z.B. mit 2000 und endend mit 2600) ein definierter Buchstabenbereich zugeordnet wird.
Diese Ordnungsnumemrn mit Zahlen werden zuständigkeitshalber bestimmten Personen zugewiesen. Dabei entstehen größeere zusammenhängenede Bereiche, für die dann ein Bearbeiter zuständig ist.
Um nicht 600 Tabellenzeilen(für Übersichten und Ausdrucke) zu haben, sollen die zusammengehörigen Bereiche zusammengefaßt und per Gliederungsfunktion gerafft dargestellt werden.

Da sich diese Zuständigkeiten immer wieder ändern, möchte ich die Tabelle automatisch gleidern.

Wenns hilft, sende ich gerne mal eine abgespeckte Beispieltabelle.

CU
want2cu

Antwort 7 von Guenter

Hallo Klaus,

Du kannst mir gerne eine kleine Beispieltabelle schicken:

guenter.hoelzemann@lycos.com

Es ist mir aber hier schon öfter passiert, dass aus einer einfachen Anfrage ein komplexes Problem geworden ist.

Gruß
Günter

Antwort 8 von want2cu

Hallo Günter,

Tabelle ist unterwegs.
Nochmals ganz herzlichen Dank!

CU
want2cu

Antwort 9 von Guenter

Hallo Klaus,

hier ist das verbesserte Makro:

Option Explicit

Sub test()
  Dim i As Integer
  Dim n As Integer
  Dim rowNr As Integer
  i = Cells(Rows.Count, 1).End(xlUp).Row
  
  For n = 3 To i
    If Cells(n, 2).Value > 0 Then
      rowNr = Cells(n, 2).Value - Cells(n, 1).Value
      Range(Cells(n + 1, 8), Cells(n + rowNr, 8)).Select
      Selection.Rows.Group
    End If
  Next
End Sub


So läuft es erstmal bei mir.
Du musst nochmals kontrollieren, ob alles stimmt.
Ich schicke Dir auch den File mit Makro zurück.

Gruß
Günter

Antwort 10 von want2cu

Hallo Günter,

es läuft super!

Ganz herzlichen Dank und viele Grüsse aus dem Bergischen Bermuda Dreieck sendet dir

want2cu