Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zeilen selektieren und danach gruppieren via VBA

2,261 views
Skip to first unread message

Volker Schmitt

unread,
Oct 7, 2009, 7:34:28 AM10/7/09
to
Hallo zusammen,

kenne mich leider nicht so sehr aus und brächte wahrscheinlich nur
einen kleinen Tipp.
ich würde gerne bestimmte Zeilen selektieren und später gruppieren.
Durch eine Sortierung muss ich nur noch schauen von welcher Zeile bis
zu welcher Zeile in einer Spalte der Wert "1A" steht. Diese Zeilen
möchte ich dann Gruppieren... und das für das ganze Tabellenblatt.

Mein Code wäre dazu folgender:

Sub Gruppierung_erstellen2()

i = 1
While i < 65000
While Cells(i, 7) = "1A"
If Start = 1 Then
Anfang = Val(i)
Start = 2
End If
i = i + 1
Wend
Ende = Val(i)
Rows("Anfang" & ":" & "Ende").Select
Selection.Rows.Group
i = i + 1
Start = 1
Wend

End Sub

Ich bekomme aber immer die Fehlermeldung, das ich den falschen
Datentyp in der Zeile:
Rows("Anfang" & ":" & "Ende").Select
verwende.
Wo liegt denn der Fehler? Sind doch alles ganze Zahlen, oder?

Danke
Volker

Alexander Wolff

unread,
Oct 7, 2009, 8:14:33 AM10/7/09
to
Als <news:8325f249-7d71-4d8d...@v20g2000vbs.googlegroups.com>
lie�
Volker Schmitt verlautbaren, evtl. nachfolgend zitiert:

> Rows("Anfang" & ":" & "Ende").Select

ist Unsinn. Was Du m�chtest, ist

Rows(Anfang & ":" & Ende).Select
also ohne Anf�hrungsstriche, die Deine Variablen zu Strings machten.

Rest nicht �berpr�ft. Die Nicht-Verwendung von .Select nicht angeregt.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2


Volker Schmitt

unread,
Oct 7, 2009, 8:42:08 AM10/7/09
to
On 7 Okt., 14:14, "Alexander Wolff" <oo...@gmx.de> wrote:
> Als <news:8325f249-7d71-4d8d...@v20g2000vbs.googlegroups.com>
> ließ

> Volker Schmitt verlautbaren, evtl. nachfolgend zitiert:
>
> >     Rows("Anfang" & ":" & "Ende").Select
>
> ist Unsinn. Was Du möchtest, ist
>
> Rows(Anfang & ":" & Ende).Select
> also ohne Anführungsstriche, die Deine Variablen zu Strings machten.
>
> Rest nicht überprüft. Die Nicht-Verwendung von .Select nicht angeregt.

> --
> Moin+Gruss Alexander - MVP for MS Excel -www.xxcl.de- mso2000sp3 --7-2

Danke für den Hinweis. Bekomme aber immernoch den Fehler mit Typen
unverträglich.
Mir war auch schon klar das ich so die Anfang und Ende zu Strings
mache.
Ohne Select komme ich leider auch nicht aus. Irgendwie stehe ich auf
dem Schlauch

Melanie Breden

unread,
Oct 7, 2009, 8:38:57 AM10/7/09
to
Hallo Volker,

"Volker Schmitt" schrieb:
> ich w�rde gerne bestimmte Zeilen selektieren und sp�ter gruppieren.


> Durch eine Sortierung muss ich nur noch schauen von welcher Zeile bis
> zu welcher Zeile in einer Spalte der Wert "1A" steht. Diese Zeilen

> m�chte ich dann Gruppieren... und das f�r das ganze Tabellenblatt.

zum einen ist das Selektieren der Zellen v�llig unn�tig.
Und je nach Umfang der Tabelle braucht eine Schleife viel zu lange :-(

Schau dir stattdessen mal folgenden L�sungsvorschlag an:

Public Sub MyGroup()
Dim strFind As String
Dim rngFind As Range
Dim lngStart As Long
Dim lngEnd As Long

strFind = "1A"

With ActiveSheet
.Columns("G").Sort Key1:=.Range("G2"), Order1:=xlAscending, Header:=xlYes

Set rngFind = .Columns("G").Find(What:=strFind, SearchDirection:=xlNext)
If rngFind Is Nothing Then
MsgBox "Der Suchwert wurde nicht gefunden!"
Exit Sub
End If

lngStart = rngFind.Row
lngEnd = .Columns("G").Find(What:=strFind, SearchDirection:=xlPrevious).Row
.Rows.Ungroup
.Rows(lngStart).Resize(lngEnd - lngStart + 1).Group
End With
End Sub


Mit freundlichen Gr�ssen
Melanie Breden

--
- Microsoft MVP f�r Excel -
www.melanie-breden.de

Ribbon-Programmierung f�r Office 2007 http://tinyurl.com/59awla

Volker Schmitt

unread,
Oct 7, 2009, 8:49:23 AM10/7/09
to
On 7 Okt., 14:38, "Melanie Breden" <Melanie.Bre...@mvps.org> wrote:
> Hallo Volker,
>
> "Volker Schmitt"  schrieb:
>
> > ich würde gerne bestimmte Zeilen selektieren und später gruppieren.

> > Durch eine Sortierung muss ich nur noch schauen von welcher Zeile bis
> > zu welcher Zeile in einer Spalte der Wert "1A" steht. Diese Zeilen
> > möchte ich dann Gruppieren... und das für das ganze Tabellenblatt.
>
> zum einen ist das Selektieren der Zellen völlig unnötig.

> Und je nach Umfang der Tabelle braucht eine Schleife viel zu lange :-(
>
> Schau dir stattdessen mal folgenden Lösungsvorschlag an:

>
> Public Sub MyGroup()
>    Dim strFind    As String
>    Dim rngFind    As Range
>    Dim lngStart   As Long
>    Dim lngEnd     As Long
>
>    strFind = "1A"
>
>    With ActiveSheet
>       .Columns("G").Sort Key1:=.Range("G2"), Order1:=xlAscending, Header:=xlYes
>
>       Set rngFind = .Columns("G").Find(What:=strFind, SearchDirection:=xlNext)
>       If rngFind Is Nothing Then
>          MsgBox "Der Suchwert wurde nicht gefunden!"
>          Exit Sub
>       End If
>
>       lngStart = rngFind.Row
>       lngEnd = .Columns("G").Find(What:=strFind, SearchDirection:=xlPrevious).Row
>       .Rows.Ungroup
>       .Rows(lngStart).Resize(lngEnd - lngStart + 1).Group
>    End With
> End Sub
>
> Mit freundlichen Grüssen
> Melanie Breden
>
> --
> - Microsoft  MVP für Excel -www.melanie-breden.de
>
> Ribbon-Programmierung für Office 2007http://tinyurl.com/59awla

Mit dem Code bekomme ich Laufzeitfehler 1004 Die Ungroup Methode des
Range Objekts konnte nicht ausgeführt werden.
Verstehe auch noch nicht hunderprozentig was das Makro macht.

Melanie Breden

unread,
Oct 7, 2009, 9:02:28 AM10/7/09
to
Hallo Volker,

> Mit dem Code bekomme ich Laufzeitfehler 1004 Die Ungroup Methode des

> Range Objekts konnte nicht ausgef�hrt werden.

Diese Codezeile hebt eine bereits vorhandene Gruppierung auf.
Allerdings erh�lt man einen Fehler, wenn in dem Blatt keine Gruppierung ist.

�nder die Codezeile wie folgt:

If IsNull(.Rows.OutlineLevel > 1) Then .Rows.Ungroup

> Verstehe auch noch nicht hunderprozentig was das Makro macht.

Was genau verstehst du nicht?


Mit freundlichen Gr�ssen
Melanie Breden

--

Claus Busch

unread,
Oct 7, 2009, 9:04:23 AM10/7/09
to
Hallo Volker,

dann probiers mal so:

Sub Gliedern()
Dim LRow As Long
Dim i As Long
Dim myRange As Range
Dim Start As Long

LRow = Cells(Rows.Count, "G").End(xlUp).Row
Start = Cells.Find("1A", After:=Range("G1"), _
SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
For i = Start To LRow + 1
If Cells(i, "G") = "1A" Then
If myRange Is Nothing Then
Set myRange = Rows(i)
Else
Set myRange = Union(myRange, Rows(i))
End If
Else
myRange.Rows.Group
Set myRange = Nothing
i = Cells.Find("1A", After:=Cells(i, "G"), _
SearchOrder:=xlByRows, SearchDirection:=xlNext).Row - 1
If i < Start Then Exit Sub
End If
Next
End Sub

Mit freundlichen Gr�ssen
Claus Busch
--
Win XP PRof SP2 / Vista Ultimate SP2
Office 2003 SP2 /2007 Ultimate SP2

Volker Schmitt

unread,
Oct 7, 2009, 9:38:28 AM10/7/09
to
On 7 Okt., 15:02, "Melanie Breden" <Melanie.Bre...@mvps.org> wrote:
> Hallo Volker,
>
> > Mit dem Code bekomme ich Laufzeitfehler 1004 Die  Ungroup Methode des
> > Range Objekts konnte nicht ausgeführt werden.

>
> Diese Codezeile hebt eine bereits vorhandene Gruppierung auf.
> Allerdings erhält man einen Fehler, wenn in dem Blatt keine Gruppierung ist.
>
> Änder die Codezeile wie folgt:

>
>       If IsNull(.Rows.OutlineLevel > 1) Then .Rows.Ungroup
>
> > Verstehe auch noch nicht hunderprozentig was das Makro macht.
>
> Was genau verstehst du nicht?
>
> Mit freundlichen Grüssen
> Melanie Breden
>
> --

> - Microsoft  MVP für Excel -www.melanie-breden.de
>
> Ribbon-Programmierung für Office 2007http://tinyurl.com/59awla

Hallo Melanie,

Soweit funktioniert das Ganze, aber es macht das was ich befürchtet
habe.
Die Spalte G wird sortiert und alle Zeilen mit "1A" in G werden zu
einer Gruppe zusammengefasst.
Ich will aber gerade nicht alle sortieren sondern, die bestehende
Sortierung beibehalten und untereinanderstehende Zeilen in denen in G
"1A" steht zusammenfassen.
Dies kann eine, oder auch hundert Zeilen sein.

Volker Schmitt

unread,
Oct 7, 2009, 10:26:36 AM10/7/09
to
> Mit freundlichen Grüssen

> Claus Busch
> --
> Win XP PRof SP2 / Vista Ultimate SP2
> Office 2003 SP2 /2007 Ultimate SP2

Danke! Das funktioniert prima. Kann ich jetzt wenn die "1A" gruppiert
sind nochmal eine weitere Ebene gruppieren?
Sprich alle 1A ind zusammengepackt gruppiert und ich möchte auf der
darüberliegenden Ebene (bei mir heißen die 2W) auch nochmal alle 2W
gruppieren.
Geht das dann auch?
Hatte den Code auch schon geändert, er hat aber scheinbar Probleme mit
sichtbaren und nicht sichtbaren sprich gruppierten Feldern.

Claus Busch

unread,
Oct 7, 2009, 11:00:30 AM10/7/09
to
Hallo Volker,

Am Wed, 7 Oct 2009 07:26:36 -0700 (PDT) schrieb Volker Schmitt:

>Kann ich jetzt wenn die "1A" gruppiert
> sind nochmal eine weitere Ebene gruppieren?

> Sprich alle 1A ind zusammengepackt gruppiert und ich m�chte auf der
> dar�berliegenden Ebene (bei mir hei�en die 2W) auch nochmal alle 2W


> gruppieren.
> Geht das dann auch?

> Hatte den Code auch schon ge�ndert, er hat aber scheinbar Probleme mit


> sichtbaren und nicht sichtbaren sprich gruppierten Feldern.

es wird hierbei immer in der gleichen Ebene gruppiert. Und wenn dann z.B.
Zellen mit 1A und 2W direkt hintereinander sind, wird die Gruppierung
zusammengef�hrt.
Kannst du nicht nach "Enth�lt nicht 1A" bzw. "Enth�lt nicht 2W" filtern?
Oder die Gliederung nach 1A und 2W umeinander machen, d.h. f�r 1A die
Gruppierung wieder aufheben und danach nach2W gliedern?


Mit freundlichen Gr�ssen

0 new messages