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

Nummerierung bei Einrücken des Textes erweitern

Nummerierung bei Einrücken des Textes erweitern
22.06.2016 06:30:58
cH_rI_sI

Guten Morgen liebe Forumsgemeinde!
Wie immer habe ich wieder eine knifflige Aufgabe für Euch:
Ich habe eine Spalte mit fortlaufender Nummerierung - wenn ich nun in einer Zeile die Nummerierung einrücke bzw. noch weiter einrücke, soll das so aussehen:
Vorher:
Userbild
Nachher:
Userbild
Natürlich soll das Ganze anders herum auch funktionieren...
Wie könnte man so etwas realisieren? Jemand eine Idee? Eure Vorschläge sind mir sehr willkommen ;-)
Lg,
Chrisi

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Bsp mit Hilfsspalte ...
22.06.2016 06:43:42
Matthias L
Hallo
Hier (m)eine Variante ... ;-)
Tabelle1

Leerzeichen^^
22.06.2016 07:45:03
baschti007
Hallo cH_rI_sI
So sollte es auch gehen^^

Public Function AnzahlZeichen(TextZelle As Range, SuchString As String)
Dim lngCnt
With TextZelle.Cells(1, 1)
AnzahlZeichen = 0
For lngCnt = 1 To Len(.Text)
If Mid(.Text, lngCnt, 1) = SuchString Then _
AnzahlZeichen = AnzahlZeichen + 1
Next lngCnt
End With
End Function
Sub Leerzeichen()
Dim i As Long
Dim letztezeile As Long
letztezeile = ActiveSheet.Cells(1048576, 1).End(xlUp).Row
For i = 1 To letztezeile
If AnzahlZeichen(Cells(i, 1), ".") = 1 Then
Cells(i, 2).Value = "  " & Cells(i, 2)
End If
If AnzahlZeichen(Cells(i, 1), ".") = 2 Then
Cells(i, 2).Value = "    " & Cells(i, 2)
End If
Next i
End Sub

Gruß Basti

Anzeige
Etwas einfacher
22.06.2016 08:30:30
RPP63
Moin!
Ins Modul der Tabelle:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target = "" Then Target.Offset(0, 1).IndentLevel = 0: Exit Sub
Target.Offset(0, 1).IndentLevel = UBound(Split(Target, "."))
End If
End Sub
Reagiert auf Änderungen in Spalte A und wirkt sich auf Spalte B aus.
Gruß Ralf

AW: Etwas einfacher
22.06.2016 08:34:40
RPP63
Oder als ausführbares Makro in einem allgemeinen Modul:
Sub RPP()
Dim Zelle As Range
For Each Zelle In Range(Cells(1, 1), Cells(1, 1).End(xlDown))
Zelle.Offset(0, 1).IndentLevel = UBound(Split(Zelle, "."))
Next
End Sub
Gruß Ralf

Anzeige
AW: Etwas einfacher
22.06.2016 10:23:53
cH_rI_sI
@ ALL: Herzlichen Dank für die rasche Unterstützung - Ihr seid echt die Besten! Aber...
leider funktioniert bei mir keine Lösung (wahrscheinlich bin ich aber nur zu blöd ;-) - anbei meine Beispieldatei:
https://www.herber.de/bbs/user/106403.xlsm
Wäre nett, wenn Ihr Euch das nochmal ansehen könntet - Danke!
Lg,
Chrisi

IndentLevel ...
22.06.2016 11:39:07
Matthias L
Hallo
Bsp. für A1:B1 mit Info über Einzug
https://www.herber.de/bbs/user/106407.xlsm

  • Button anklicken

  • Einzug verändern

  • Wieder Button klicken


Zelle muss mind. ein Zeichen haben
Hab ich Dich richtig verstanden?
Gruß Matthias

Anzeige
AW: IndentLevel ...
22.06.2016 12:09:01
cH_rI_sI
Nein leider nicht - seht Euch bitte nochmal das Bild "vorher" und "nachher" im Eröffnungsthread an - ich ändere nur in Spalte B die Einrückung und dann soll sich die Nummerierung autom. anpassen:
Also nochmals zur Erklärung - der Ausgangszustand:
Userbild
Und so soll es aussehen, wenn Zeile 2, 3 und 7 einmal eingerückt wurde (daher die Nummern erweitert auf *.1) und Zeile 8 zweimal eingerückt wurde (daher die Nummer erweitert auf *.1.1):
Userbild
ACHTUNG - natürlich soll sich durch das Einrücken und folglich Nummern-Erweiterung die fortlaufende Nummerierung automatisch anpassen!
Ich hoffe, meine Anforderung ist nun klarer - viel Spaß beim Tüfteln und Danke im Voraus für Eure Unterstützung!!!
Lg,
Chrisi

Anzeige
Nummerierung bei Einrücken des Textes erweitern
22.06.2016 15:27:10
Michael
Hi,
anbei Datei mit beiden Varianten: https://www.herber.de/bbs/user/106424.xlsm
Der aufwendigere Algo:
Sub Machen2()
Dim a(), i&, k&, maxZ&, ll&, aus$()
maxZ = Range("B" & Rows.Count).End(xlUp).Row
ReDim a(1 To maxZ, 3)
ReDim aus(2 To maxZ, 0)
For k = 0 To 3: For i = 1 To maxZ: a(i, k) = 0: Next: Next
ll = 1
For i = 2 To maxZ
a(i, 0) = Range("B" & i).IndentLevel + 1
If a(i, 0) = ll Then
For k = 1 To 3: a(i, k) = a(i - 1, k): Next
a(i, ll) = a(i - 1, ll) + 1
Else
If a(i, 0) < ll Then
ll = a(i, 0)
a(i, ll) = a(i - 1, ll) + 1
For k = 1 To ll - 1: a(i, k) = a(i - 1, k): Next
Else
If a(i, 0) > ll Then
For k = 1 To a(i, 0) - 1: a(i, k) = a(i - 1, k): Next
a(i, a(i, 0)) = a(i - 1, a(i, 0)) + 1
ll = a(i, 0)
End If
End If
End If
For k = 1 To ll: aus(i, 0) = aus(i, 0) & a(i, k) & ".": Next
aus(i, 0) = Left(aus(i, 0), Len(aus(i, 0)) - 1)
Next
Range("D1:G" & maxZ) = a ' diese Zeile ggf. löschen...
Range("A2:A" & maxZ) = aus
End Sub
Schöne Grüße,
Michael

Anzeige
AW: Nummerierung bei Einrücken des Textes erweitern
22.06.2016 15:39:06
cH_rI_sI
Hey Michael,
also - das hätte ich niemals hinbekommen - der Code sieht zumindest extrem kompliziert aus... Muss ich also Testen und kann Dir dann eine Rückmeldung geben...
Geht das Ganze auch ohne Hilfsspalten? Die wären bei mir ein Problem...
Lg und nochmals vielen, vielen Dank für die Mühe (hat sicher einiges an Zeit gekostet)!

tja, das liebe "Knobeln"
22.06.2016 16:27:44
Michael
Hi,
die Hilfsspalten werden in der Code-Zeile geschrieben, hinter der als Kommentar steht:
diese Zeile ggf. löschen...
Ansonsten bin ich von max. 3 "Tiefen" ausgegangen, das läßt sich aber ohne Aufwand erweitern.
Ups, ich merke gerade, daß hier noch eine Fehlerabfrage für "Tiefe > 3" reingehören würde...
Schöne Grüße,
Michael

Anzeige
AW: tja, das liebe "Knobeln"
23.06.2016 11:59:20
cH_rI_sI
Hi Michael,
dein Code funktioniert soweit wie gewünscht - kannst Du den Code eventuell noch auf eine "4. Tiefe" erweitern und den Fehler abfangen falls "Tiefe größer 4" - wäre echt nett von Dir...
Besten Dank und schönen Tag noch!!!
Lg,
Chrisi

geht schon
23.06.2016 16:23:40
Michael
Hi Chrisi,
die Fehlermeldung paßt nicht, aber ich hab jetzt keine Zeit, und arbeiten läßt sich's damit:
Sub Machen2()
Dim a(), i&, k&, maxZ&, ll&, aus$()
Const maxArr = 4        ' *** neu ***
maxZ = Range("B" & Rows.Count).End(xlUp).Row
ReDim a(1 To maxZ, maxArr)
ReDim aus(2 To maxZ, 0)
For k = 0 To maxArr: For i = 1 To maxZ: a(i, k) = 0: Next: Next
ll = 1
For i = 2 To maxZ
a(i, 0) = Range("B" & i).IndentLevel + 1
If a(i, 0) > maxArr Then _
MsgBox "Nr. " & i & "zu tief eingerückt": a(i, 0) = maxArr
If a(i, 0) = ll Then
For k = 1 To maxArr: a(i, k) = a(i - 1, k): Next
a(i, ll) = a(i - 1, ll) + 1
Else
If a(i, 0) < ll Then
ll = a(i, 0)
a(i, ll) = a(i - 1, ll) + 1
For k = 1 To ll - 1: a(i, k) = a(i - 1, k): Next
Else
If a(i, 0) > ll Then
For k = 1 To a(i, 0) - 1: a(i, k) = a(i - 1, k): Next
a(i, a(i, 0)) = a(i - 1, a(i, 0)) + 1
ll = a(i, 0)
End If
End If
End If
For k = 1 To ll: aus(i, 0) = aus(i, 0) & a(i, k) & ".": Next
aus(i, 0) = Left(aus(i, 0), Len(aus(i, 0)) - 1)
Next
' Range("D1:G" & maxZ) = a ' diese Zeile ggf. löschen...
Range("A2:A" & maxZ) = aus
End Sub
LG,
Michael

Anzeige
AW: tja, das liebe "Knobeln"
23.06.2016 14:34:15
cH_rI_sI
Hallo Michael,
ich hätte noch eine Bitte bzw. Frage - kann man die Hilfsspalten eventuell auf 1 Spalte reduzieren und vielleicht die Einträge mit einem Komma oder so trennen? Wäre echt super wenn Du Dir das nochmals ansehen könntest - Danke!
Woher kommst Du eigentlich? Hier bin ich schon mindestens 1 Bier schuldig ;-)
Lg,
Chrisi

hat sich overlapped
23.06.2016 16:29:36
Michael
Hi,
aus Franken, nämlich Nbg., denn man Prost.
Nee, die Hilfsspalten könnte man NACH Abarbeitung mit , trennen, aber wozu? Du wolltest sie doch eh nicht?
Ich muß weg...
M.

AW: hat sich overlapped
24.06.2016 07:08:17
cH_rI_sI
Guten Morgen lieber Michael,
erstmas herzlichen Dank für alles - ich bin echt beeindruckt was Du hier programmiert hast!!!
So - nun habe ich den neuen Code ausprobiert und es funktioniert auch - aber wenn ich den Beginn auf A22 ändere (ist in meinem File so) dann funktioniert das Ganze nicht mehr:
Userbild
Anbei auch noch das Beispielfile:
https://www.herber.de/bbs/user/106478.xlsm
Ich weiß schön langsam werde ich lästig, aber deinen Code durchblicke ich leider nicht mehr - hierfür reichen meine Kenntnisse nicht... Leider...
Daher schonmal Danke und schönes WE!!!
Glg,
Chrisi

Anzeige
AW: hat sich overlapped
24.06.2016 08:52:53
cH_rI_sI
Hallo Michael,
ich bin nun selbst darauf gekommen, wie man den Offset setzt:
Userbild
Trotzdem danke - ohne Dich hätte ich das vermutlich nie realisieren können!
Schönes WE und liebe Grüße,
Chrisi

freut mich, gerne,
24.06.2016 13:52:57
Michael
Chrisi,
Dir auch ein schönes WE & lg zurück,
Michael

AW: hat sich overlapped
24.06.2016 08:53:04
cH_rI_sI
Hallo Michael,
ich bin nun selbst darauf gekommen, wie man den Offset setzt:
Userbild
Trotzdem danke - ohne Dich hätte ich das vermutlich nie realisieren können!
Schönes WE und liebe Grüße,
Chrisi

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige