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

Automatische Nummerierung in Gliederung

2,752 views
Skip to first unread message

Lars

unread,
Mar 11, 2004, 4:32:52 AM3/11/04
to
Hallo Leute,
ich suche eine Möglichkeit einer automatischen Nummerierung, welche
sich auf die Gliederungsebenen bezieht. D.h. ich habe eine Gliederung
mit 4 Ebenen und in der ersten Spalte soll eine automatische
Nummerierung stattfinden. Nummerierung 1.Gliederungsebene mit 1. 2. 3.
..., 2.Ebene mit 1.1. 1.2. 1.3 ..., 3.Ebene mit 1.1.1. 1.1.2. 1.1.3
... usw.
Kann Exel dies Standartmaessig (ich habs nicht geschafft) oder muss
ich mit vba Programmieren? Wenn mit vba, wie identifiziere ich die
Gliederungsebene einer Zelle? Es soll wenn eine Zeile eingefügt wird
der Rest automatisch angepasst werden (z.B. neue Zeile füer Ebene 1.2.
dann soll alte 1.2. zu 1.3. werden, 1.3 zu 1.4. usw.
vielen Dank im Voraus, ich weiss echt nicht mehr weiter wie ich es
integrieren koennte.

arno

unread,
Mar 11, 2004, 5:01:18 AM3/11/04
to
Hi Lars,

> Wenn mit vba, wie identifiziere ich die
> Gliederungsebene einer Zelle?

Du willst "auslesen" in welcher Gliederungsebene du dich befindest, aber wer
und wie wird denn die Gliederung eingerichtet? Wenn du das weisst, kannst du
es auch mit VBA programmieren. Wenn du Gliederungen hast, ohne zu wissen
warum, sind deine Daten schlecht organisiert.

viele grüsse


arno


Alexander Wolff

unread,
Mar 11, 2004, 3:45:20 PM3/11/04
to
Ohne Gliederungsebenen von Excel, aber dafür rein formelmäßig mit
eigener Ebenensprungangabe:

http://mitglied.lycos.de/cfawhb/excel/newsGliederung.xls
--
Gruß Alexander XL2000/WIN98SE (Antworten bitte nur hier!)


Lars <lars.k...@gmx.de> schrieb in im Newsbeitrag:
31519c25.04031...@posting.google.com...

Lars

unread,
Mar 15, 2004, 5:28:03 AM3/15/04
to
> Du willst "auslesen" in welcher Gliederungsebene du dich befindest, aber wer
> und wie wird denn die Gliederung eingerichtet? Wenn du das weisst, kannst du
> es auch mit VBA programmieren. Wenn du Gliederungen hast, ohne zu wissen
> warum, sind deine Daten schlecht organisiert.

Hi Arno,
ueber (Excel 97 SR 2 ) Daten->Gruppierung und Gliederung->Gruppierung->Zeilen.
In der ersten Zelle geder Zeile soll nun die jeweilige Gliederungszahl stehen:
1.
1.1.
1.2.
1.3.
usw ...

Lars

unread,
Mar 15, 2004, 5:31:40 AM3/15/04
to
> Ohne Gliederungsebenen von Excel, aber dafür rein formelmäßig mit
> eigener Ebenensprungangabe:
Hi Alexander,
vielen Dank fuer deine Antwort, ich benoetige jedoch die Gliederung.
Gruss Lars

arno

unread,
Mar 16, 2004, 3:46:48 AM3/16/04
to
> ueber (Excel 97 SR 2 ) Daten->Gruppierung und
Gliederung->Gruppierung->Zeilen.
> In der ersten Zelle geder Zeile soll nun die jeweilige Gliederungszahl
stehen:
> 1.
> 1.1.
> 1.2.
> 1.3.
> usw ...

usw. = also:
2.
2.1
2.2
3.
3.1

schon klar! woran erkennst du den wechsel von von 1.3 nach 2. ?

arno


Lars

unread,
Mar 16, 2004, 11:15:49 AM3/16/04
to
> schon klar! woran erkennst du den wechsel von von 1.3 nach 2. ?

Hi Arno,
genau dies ist mein Problem, ich möchte die Gliederungsebenen (welche
links am Blattrand durch + und - aufgeklappt und geschlossen werden
können) mit VBA identifizieren, damit ich die Nummerierung als Wert
(1.3 oder 2.) zurück in die Zelle geben kann.

Gruss Lars

arno

unread,
Mar 17, 2004, 4:37:44 AM3/17/04
to
atme tief durch, geh' in dich und lies mal ganz genau die folgende frage:

_woran_erkennst_du,_dass_von_1.3_auf_2._gewechselt_werden_soll,_wenn_du_das_
manuell_erledigen_müsstest?

arno

"Lars" <lars.k...@gmx.de> schrieb im Newsbeitrag
news:31519c25.04031...@posting.google.com...

Lars

unread,
Mar 29, 2004, 4:40:42 AM3/29/04
to
> _woran_erkennst_du,_dass_von_1.3_auf_2._gewechselt_werden_soll,_wenn_du_das_
> manuell_erledigen_müsstest?

ich erkenne es an den Gliederungsebenen am linken Blattrand (links von
den Zeilennummern sind die Gliederungsebenen mit + und - aufklappbar).
ich kann auch einen screenshot zur Verdeutlichung verschicken...

arno

unread,
Mar 29, 2004, 5:10:00 AM3/29/04
to
Hi Lars,

> ich erkenne es an den Gliederungsebenen am linken Blattrand

ich frage dich nur noch ein einziges mal, also reiss dich zusammen:

Nehmen wir mal an, in deinem Blatt sind _keine_ Gliederungssymbole (das sind
diese + und - Dinger ganz links). Wenn du diese Gliederungen selbst setzen
müsstest, woran erkennst du dann, was in welche Ebene gehört? Woran erkennst
du, dass Ebene 1.3 aus ist und jetzt 2. kommt?

Solltest du keine Antwort auf diese Frage haben, dann lies meine
ursprüngliche Antwort auf deine Frage.

arno


Frank Kabel

unread,
Mar 29, 2004, 5:25:33 AM3/29/04
to
"arno" <schob...@azoppoth.at> schrieb im Newsbeitrag
news:eiX4AYXF...@TK2MSFTNGP11.phx.gbl...

> Hi Lars,
>
> > ich erkenne es an den Gliederungsebenen am linken Blattrand
> ich frage dich nur noch ein einziges mal, also reiss dich zusammen:

Hi Arno
</etwas Ironie>
Das kommt mir doch irgendwie bekannt vor. Meine Kunden sind genauso.
Das Programm MUSS doch wissen, was ich will. Du musst also einfach ein
'Do what I mean' Makro bereitstellen
sorry, konnte einfach nicht widerstehen ;-)
</etwas Ironie aus>
----
An Lars:
Bitte nicht missverstehen. Arnos Problem (und das geht mir so und den
anderen Mitlesenden wahrscheinlich auch) ist, dass wir eine exakte
Spezifikation brauchen, wie Du die Gliederungsebenen setzen möchtest.
D.h. du musst uns irgendwelche Merkmale nennen, die ein
Computeralgorithmus auch erkennen kann. Bsp wären z.B.:
- Eine neue Ebene fängt immer dann an, wenn ein bestimmtes Wort in
Spalte A auftaucht
- du hast in einer anderen Spalte ein bestimmtes Merkmal, das den
Wechsel ankündigt.

Stelle Dir einfach vor, du müsstes einem Kollegen erklären, wann er in
Deiner Tabelle MANUELL eine Nummerierung setzen soll. wenn du das
eindeutig definieren kannst, ist es relativ einfach, das in VBA
umzusetzen.
Du hast bisher leider eher eine 'Henne - Ei' Erklärung geliefert :-)
- Wenn die Markierung gesetzt ist, dann nummeriere wie die Gruppierung
gesetzt wurde.

Gruß
Frank


arno

unread,
Mar 29, 2004, 6:38:21 AM3/29/04
to
> 'Do what I mean' Makro bereitstellen
Ich sehe schon, auch du bist noch nicht bereit, die allumfassende Lösung zu
erkennen. Mit solchem Kleinkram wie Makros geb ich mich schon lange nicht
mehr ab. Ich plane nämlich, morgen die Weltherrschaft an mich zu reissen.
Und zwar werde ich mit meiner Software mehr Vermögen ansammeln als Billie
the Gates. Dazu muss ich nur noch ein paar Zeilen Code in Newsgroups wie
dieser testen, dann ist es fertig, das "Telepathiemodul 1.0". Der
Softwarekäufer muss dann nur ganz kurz, ganz fest an das Programm denken,
was er haben will, und schon ist es fertig! Dann ist endlich der ganze
zwischenmenschliche Kram nicht mehr notwendig und alles funktioniert
prächtig.

Die Herrschaft über das restliche Universum reisse ich dann endgültig mit
dem "Officemodul NG" an mich. Die tägliche Büroarbeit wird dabei
vollautomatisch allein durch die morgendliche Betätigung des Lichtschalters
im heimatlichen Badezimmer erledigt. Dazu müsste ich nur noch schnell
wissen, auf welche Frage die Antwort "42" lautet.

Ja, sonst bin ich völlig gesund ;))

arno

Frank Kabel

unread,
Mar 29, 2004, 6:49:48 AM3/29/04
to

"arno" <schob...@azoppoth.at> schrieb im Newsbeitrag
news:#U#uYJYFE...@TK2MSFTNGP11.phx.gbl...

Hi Arno
rotflol

Sag bloß Bescheid, wenn Deine Software fertig ist. Teste auch gerne die
Beta Version :-)
Frank


arno

unread,
Mar 29, 2004, 8:51:08 AM3/29/04
to

> Sag bloß Bescheid, wenn Deine Software fertig ist. Teste auch gerne die
> Beta Version :-)
> Frank

nieeemallssssssss, sssssissssst meeeeiiiin schatzsssssssss! miiiir
alllleiiinnnn, jawoll!


Ingrid Kutsche

unread,
Mar 29, 2004, 2:23:53 PM3/29/04
to
Hallo Arno,

dann pass nur auf, dass du nicht mit dem Schatzzz in den Schicksalsberg
stürzt, wenn du mit Frank am Rand des Kraters darum kämpfst ;-).

Frank - hüte deine Finger! Er beißt sie ab, um seinen Schatzzz wieder zu
bekommen ;-) Und kümmere dich beizeiten um deinen Rücktransport! Am
besten, Du schreibst ein ähnliches
wirkliches*Anliegen*Erkennungs*Programm! Das dürfte _dir_ doch nicht
schwerfallen!

Ingrid

arno schrieb:

Frank Kabel

unread,
Mar 29, 2004, 2:26:33 PM3/29/04
to
Ingrid Kutsche wrote:
> Hallo Arno,
>
> dann pass nur auf, dass du nicht mit dem Schatzzz in den
> Schicksalsberg stürzt, wenn du mit Frank am Rand des Kraters darum
> kämpfst ;-).
>
> Frank - hüte deine Finger! Er beißt sie ab, um seinen Schatzzz wieder
> zu bekommen ;-) Und kümmere dich beizeiten um deinen Rücktransport!
Am
> besten, Du schreibst ein ähnliches
> wirkliches*Anliegen*Erkennungs*Programm! Das dürfte _dir_ doch nicht
> schwerfallen!
>
> Ingrid

Hi Ingrid
irgendwie werden die Adler dann hoffentlich kommen :-)

Allerdings scheinen wir den OP mit diesem Off-Topic Thread jetzt doch
etwas verschreckt zu haben.

Frank

Ingrid Kutsche

unread,
Mar 29, 2004, 2:38:37 PM3/29/04
to
Oder er trainiert schon die Adler, um Euch beide zu retten ;-)

Ingrid

Frank Kabel schrieb:

arno

unread,
Mar 30, 2004, 2:12:32 AM3/30/04
to
> Oder er trainiert schon die Adler, um Euch beide zu retten ;-)

merksssst du essssss, frank?? merkssst du essssss?? zuersst verfolgggt sie
unsssss heimlich, und dann eine verschwörung! pfui, hexe, pfui bah!

;)


Frank Kabel

unread,
Mar 30, 2004, 5:06:33 AM3/30/04
to
Sie will unseren schatzzzzzzz, Es issst unser, unser schatzzzzz

:-)


--
Regards
Frank Kabel
Frankfurt, Germany

Lars

unread,
Mar 30, 2004, 10:02:41 AM3/30/04
to
"Frank Kabel" <frank...@freenet.de> wrote in message news:<uG1MogX...@TK2MSFTNGP10.phx.gbl>...

Hallo Frank und Arno,
das Problem ist folgendes: Man kann aus dem Inhalt des Blattes keine
logische Formulierung ableiten mit der man erkennt, wann ein
Nummerierungssprung von 1.3 nach 2.0 kommen soll. Daher soll sich die
Nummerierung an der vom Benutzer erstellten Gliederung richten. Diese
wird von Hand geändert und gepflegt. Die Merkmale anhand derer der
Computeralgorithmus den Nummerierungssprung erkennen muss ist anhand
der vorhandenen Gliederung.
Man kann die Gliederung mit dem Inhaltsverzeichnis eines Buches
vergleichen: in der ersten Spalte soll die Nummerierung stehen in der
2. Spalte steht Text. Gegliedert wird vom Benutzer inhaltlich
entsprechend den Zeileninhalten (wie Kapitel und Unterkapitel bei
einem Buch). Der Sinn sollte sein, dass wenn ich einen weiteren
Unterpunkt (Zeile) nachträglich einfüge sollen alle auf dieser (und
betroffene tieferen) Ebene(n) nachkommenden Nummerierungen automatisch
angepasst werden.
Sorry, nicht sauer werden, viele Grüße, Lars

arno

unread,
Mar 31, 2004, 1:46:56 AM3/31/04
to
Hi Lars,

gut, deine User legen eine Gliederung fest, indem Sie eine Gliederung
anlegen.

Auslesen kannst du z. B. das Level von Zeile 5 mit folgendem Makro, was du
brauchst ist "OutlineLevel":
Sub test()
x = Sheets(1).Rows(5).OutlineLevel
Cells(5, 3).Value = x
End Sub

Ich schlage folgendes vor:

1) Level auslesen

Du erstellst in einer leeren Mappe in Tabelle1 eine Gliederung. Dann baust
du dir ein Makro, das die Zeilen des Blattes durchläuft und die
Gliederungsebene feststellt, z. B. in Spalte 3 (siehe oben).

2) Inhaltsverzeichnis schreiben
Dann kannst du dir einen Algorithmus überlegen, der aus Spalte 3 in Spalte 4
deine Nummererung erstellt, dh. aus

1
2
3
3
2
3
2
3
3

wird
1
1.1
1.1.1
1.1.2
1.2
usw.

Beachten: Excel kann nur 8 Gliederungsebenen. Der zweite Schritt ist recht
kompliziert mit Schleifen zu programmieren. Ich kenne keinen Algorithmus,
aber es wäre leicht möglich, dass du den 2. Schritt auch ohne Makro mit
cleveren Formeln mit Textverkettung usw. schaffen könntest (Aufteilung der
Levels auf Spalten, bisheriger Maximalwert +1, dann alle Levelspalten
verketten...).

Also:
Geh mal Schritt 1 an. Und vergiss nicht: Die User werden dich mit allen
erdenklichen unlogischen Gliederungen in den Wahnsinn treiben ;)

arno


arno

unread,
Mar 31, 2004, 3:32:10 PM3/31/04
to
Hi Lars,

das Ende ist nahe.

Nimm eine leere Tabelle, schreib folgendes untereinander irgendwohin:

1
2
3
3
2
3

4
5
6
7
8
8
2
3


1
2
3
3
2
3

3

benenne eingegebenen Bereich mit "ebene". benenne den selben Bereich nur
eine Spalte rechts mit "bereich".

weiter unten erstelle eine Gliederung, nicht vergessen "Details stehen
unten" in den Gliederungseigenschaften.
benenne den gegliederten Bereich mit "ebene1". benenne den selben Bereich
nur eine Spalte rechts mit "bereich1".

starte die beiliegenden makros.

viel spass noch damit.

arno

PS: unlogische Strukturen werden selbstverständlich unlogisch numeriert
(garbage in - garbage out)


Option Base 1 'bei 1 durchnummerieren
Sub InhaltvonHierarchie()
'wandelt Hierarchieinformationen in ein Inhaltsverzeichnis um
Dim L(8) As Integer
Dim i As Integer
Dim mspalte As Integer
Dim oldval As Integer
Dim actval As Integer
Dim cel As Range
Dim V As Variant
Dim m As Integer
Dim n As Variant

Range("bereich").ClearContents

mspalte = Range("ebene").Column + 1 'Ausgabespalte definieren
oldval = 0

For Each cel In Range("ebene") 'alle Zellen der Hierarchie durchalufen
actval = cel.Value
If oldval > actval Then 'bei einem Rücksprung auf eine höhere Ebene
For i = actval + 1 To oldval ' zur Sicherheit ginge auch: To 8
'alle restlichen Ebenen löschen
L(i) = 0
Next i
End If

L(actval) = L(actval) + 1 'neue Verzeichniseinträge berechnen
V = L(1) 'mit dem ersten Zeichen beginnen
For m = 2 To actval ' zur sicherheit ginge auch: To 8
'Unterverzeichnisse anhängen
If L(m) = 0 Then
n = ""
Else
n = "." & L(m)
End If
V = V & n
Next m
Cells(cel.Row, mspalte).Value = "'" & V 'wert in tabelle ausgeben

oldval = actval 'den letzten wert zwischenspeichern
Next cel
End Sub


Sub InhaltvonGliederung()
'wandelt Gliederung in ein Inhaltsverzeichnis um
Dim L(8) As Integer
Dim i As Integer
Dim mspalte As Integer
Dim oldval As Integer
Dim actval As Integer
Dim cel As Range
Dim V As Variant
Dim m As Integer
Dim n As Variant

Range("bereich1").ClearContents

mspalte = Range("ebene").Column + 1 'Ausgabespalte definieren
oldval = 0

For Each cel In Range("ebene1") 'alle Zellen der Hierarchie durchalufen
actval = cel.Rows.OutlineLevel
If oldval > actval Then 'bei einem Rücksprung auf eine höhere Ebene
For i = actval + 1 To oldval ' zur Sicherheit ginge auch: To 8
'alle restlichen Ebenen löschen
L(i) = 0
Next i
End If

L(actval) = L(actval) + 1 'neue Verzeichniseinträge berechnen
V = L(1) 'mit dem ersten Zeichen beginnen
For m = 2 To actval ' zur sicherheit ginge auch: To 8
'Unterverzeichnisse anhängen
If L(m) = 0 Then
n = ""
Else
n = "." & L(m)
End If
V = V & n
Next m
Cells(cel.Row, mspalte).Value = "'" & V 'wert in tabelle ausgeben

oldval = actval 'den letzten wert zwischenspeichern
Next cel
End Sub


0 new messages