Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Text einrücken mit VBA

Forumthread: Text einrücken mit VBA

Text einrücken mit VBA
04.03.2014 15:59:43
Schmecks
Hallo Leute,
ich habe wiedermal eine neue Aufgabe für Euch, bei der Ihr mir helfen könnt.
Ich habe eine Tabelle, wie angefügt. Darin können die ersten beiden Spalten immer in der angegebenen Form (Gliederungstiefe und Gliederungsnummer) ausgegeben werden. Eventuell brauche ich nicht beide für die Abfrage mit VBA.
Ich möchte nun das nur die Spalte "C" anhand der Splate A oder B, je nach Gliederungstiefe über Tabstopps o.ä. eingerückt wird (bitte nicht wie unten über Leerzeichen einrücken).
Evtl über:
Sub indent()
With Range("A1")
.IndentLevel = 2
End With
End Sub
Ich bräuchte das Einrücken mindestens bis zur 10. Ebene.
Ich habe schon mit folgendem Code ein wenig herumprobiert, kann es jedoch auf meine Bedürfnisse nicht umschreiben:
Sub Text_Einruecken()
Const dreiBlank = "        "
Const zweiBlank = "     "
Const einsBlank = "   "
Dim c As Range
Dim strTemp
For Each c In Range("C1:C1000")
strTemp = Application.Substitute(c.Value, " ", "x")
If IsNumeric(Left(strTemp, 3)) Then
c.Value = einsBlank & c.Value
Else
If IsNumeric(Left(strTemp, 2)) Then
c.Value = zweiBlank & c.Value
Else
If IsNumeric(Left(strTemp, 1)) Then
c.Value = dreiBlank & c.Value
End If
End If
End If
Next c
End Sub

mfg der Schmecks

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Tabelle, wie angefügt
04.03.2014 16:18:23
Rudi
Hallo,
ich sehe keine Tabelle.
Gruß
Rudi

AW: Text einrücken mit VBA
04.03.2014 16:38:27
Rudi
Hallo,
so?
Sub einruecken()
Dim c As Range
Application.ScreenUpdating = False
For Each c In Range(Cells(2, 3), Cells(Rows.Count, 3).End(xlUp))
c.IndentLevel = c.Offset(, -2) - 1
Next
End Sub

Gruß
Rudi

Anzeige
oder so
04.03.2014 16:41:15
Rudi

Sub einruecken()
Dim c As Range, iLevel
Application.ScreenUpdating = False
For Each c In Range(Cells(2, 3), Cells(Rows.Count, 3).End(xlUp))
iLevel = Len(c.Offset(, -1)) - Len(Replace(c.Offset(, -1), ".", ""))
c.IndentLevel = iLevel
Next
End Sub

Anzeige
AW: oder so
04.03.2014 17:41:49
Schmecks
Hallo,
funktioniert super ...
Kannst du mir für mein Verständnis noch kurz erläutern was in dem Code nach iLevel=... passiert?
mfg der Schmecks

Benutz doch mal die F1 Taste im VBAeditor
04.03.2014 17:44:24
Matze
hallo Schmecks,
...dafür ist die doch da, stell den Curser auf das Wort Len und drück F1 usw
Matze
;
Anzeige

Infobox / Tutorial

Text einrücken mit VBA in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen und wähle Modul.
  3. Kopiere den folgenden Code:

    Sub einruecken()
       Dim c As Range
       Application.ScreenUpdating = False
       For Each c In Range(Cells(2, 3), Cells(Rows.Count, 3).End(xlUp))
           c.IndentLevel = c.Offset(, -2) - 1
       Next
    End Sub
    • Dieser Code wird die Zellen in Spalte C entsprechend der Werte in den Spalten A und B einrücken.
  4. Führe das Makro aus:

    • Drücke F5, während der Cursor im Code steht, oder schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.
  5. Überprüfe das Ergebnis:

    • Deine Spalte C sollte nun entsprechend der Gliederungstiefe eingerückt sein.

Häufige Fehler und Lösungen

  • Fehler: Das Makro funktioniert nicht:

    • Stelle sicher, dass die Daten in den Spalten A und B korrekt formatiert sind und dass Spalte C die Zellen enthält, die du einrücken möchtest.
  • Fehler: IndentLevel funktioniert nicht:

    • Überprüfe, ob du die richtigen Zellen im VBA-Code referenziert hast. Achte darauf, dass du den richtigen Bereich (C2 bis C1000) verwendest.

Alternative Methoden

Wenn du keine VBA-Lösungen verwenden möchtest, kannst du auch die Excel-Funktion Einzug verwenden:

  1. Markiere die Zellen in Spalte C, die du einrücken möchtest.
  2. Klicke mit der rechten Maustaste und wähle Zellen formatieren.
  3. Gehe zum Tab Ausrichtung und stelle den Wert für Einzug ein. Dies ist jedoch nur eine manuelle Methode und weniger flexibel als der VBA-Ansatz.

Praktische Beispiele

Angenommen, du hast folgende Daten:

A (Gliederungstiefe) B (Gliederungsnummer) C (Text)
1 1 Hauptpunkt
2 1.1 Unterpunkt 1
2 1.2 Unterpunkt 2
3 1.2.1 Unterunterpunkt

Mit dem VBA-Code wird der Text in Spalte C entsprechend der Gliederungstiefe in Spalte A eingerückt. Zum Beispiel wird "Unterpunkt 1" um eine Ebene eingerückt, während "Unterunterpunkt" um zwei Ebenen eingerückt wird.


Tipps für Profis

  • Verwende Application.ScreenUpdating = False: Dies verbessert die Performance, wenn du mit großen Datenmengen arbeitest.
  • Experimentiere mit der IndentLevel-Eigenschaft: Du kannst die Einrückung dynamisch anpassen, indem du die Logik in der Schleife anpasst.
  • Nutze die F1-Taste: Wenn du mehr über Funktionen wie Len oder Replace erfahren möchtest, nutze die F1-Taste im VBA-Editor.

FAQ: Häufige Fragen

1. Kann ich den VBA-Code anpassen, um andere Spalten zu verwenden? Ja, du kannst die Zellreferenzen im Code ändern, um andere Spalten für das Einrücken zu verwenden.

2. Funktioniert dieser Code in allen Excel-Versionen? Der bereitgestellte VBA-Code sollte in den meisten modernen Excel-Versionen (Excel 2010 und neuer) funktionieren.

3. Was passiert, wenn ich mehr als 10 Ebenen einrücken möchte? Der IndentLevel in Excel unterstützt bis zu 15 Ebenen. Du kannst den Code entsprechend anpassen, um das Maximum auszuschöpfen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige