Anzeige
Archiv - Navigation
1568to1572
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

Leerstellen vor Text erkennen

Leerstellen vor Text erkennen
13.07.2017 13:52:21
Silas
Hallo,
ich nutze die Webseiten-Import Funktion von Excel. Im Text der Webseite sind allerdings Stichpunkte enthalten. Excel übernimmt diese nicht, sondern macht stattdessen einen kleinen Absatz vor den Text, wo normalerweise der Stichpunkt (-) wäre. Dies ist aber kein richtiger Absatz, wie er mit "Tab" erzeugt werden kann. Es ist quasi nur ein Leerzeichen, welches ich allerdings nicht abfangen kann. Wenn ich mir das erste Zeichen der Zelle ausgeben lasse (Left(...,1)), bekomme ich nicht das Leerzeichen, sondern den ersten Buchstaben.
Hat jemand eine Idee, wie ich per VBA abfragen kann, ob der Text in der Zelle eingerückt ist? Sobald ich den in der Zelle enthaltenen Text in einem String speichere, werden die Leerzeichen ignoriert. Die "Trim"-Funktion erkennt das Leerzeichen demnach auch nicht.
Vielen Dank schon mal im Voraus!
Grüße
Silas

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Datei bitte...owT
13.07.2017 13:53:29
Max2

AW: Datei bitte...owT
13.07.2017 14:04:50
Silas
Hier ist eine Beispiel-Datei. Dort kann man gut erkennen, dass die Anzahl der Leerstellen unterschiedlich sein kann, was ich gerne abfangen würde.
https://www.herber.de/bbs/user/114864.xlsx
Hmm...
13.07.2017 14:32:56
Max2
Hallo,
leider sehe ich da keine Möglichkeit, das ganze Sinnvoll in Excel VBA
abzufangen.
Die Leerstelle Existiert nur in der Zelle aber nicht im Zellwert.
Hau den unten stehenden Code mal in den Code des Tabellenblattes und
mache einen doppelklick auf die Zelle mit dem Text "1-fach eingerückt" und
drücke danach ENTER
Mache das gleiche mit "2-fach eingerückt"
Im Direktfenster, siehst du wie sich die Spaltenbreiten verändert haben.
Vielleicht kannst du damit was machen.
Du könntest beispielsweise, den String in eine Andere Spalte setzten, prüfen welche breite diese hat
und dann prüfen welche breite die Ursprungsspalte hat.
An der Differenz könntest du ermitteln, ob du jetzt Leerstellen hast oder nicht, bzw. die Zelle und ihren Wert dann dementsprechend abändern.
Hier Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As String
Dim colLength As Double
Dim newLength As Double
s = Target.Value
colLength = Target.ColumnWidth
Target.Columns.AutoFit
newLength = Target.ColumnWidth
Debug.Print s & " --- " & colLength & " --- " & newLength
End Sub
Hier dass, was dabei rauskommt:

1-fach eingerückt --- 10,71 --- 17
2-fach eingerückt --- 17 --- 19,57

Anzeige
AW: Hmm...
13.07.2017 15:01:23
Silas
Wow! Super, dass du da etwas gefunden hast. Da wäre ich nie drauf gekommen...
Hast du eine Idee, wie ich das sinnvoll automatisieren kann?
Ich würde jetzt einfach per Makro Zeile für Zeile durchgehen, AutoFit ausführen und anschließend die Änderung der Zellbreite auswerten.
Meinst du, das funktioniert so ordentlich und in einem annehmbaren Zeitrahmen, auch für mehrere hundert Zeilen? Die Daten stehen nämlich auch alle in einer Spalte.
AW: Hmm...
13.07.2017 15:20:37
Max2
Hallo,
geht es denn darum, den Stichpunkt strich einzufügen, oder
nur darum, dass dieser abstand weg geht?
Wenn er nur wegsoll, dann empfehle ich Werners ClearFormatting
Das ganze so zu machen, wie ich es gesagt habe, würde einen
ziemlichen murks und Workaround Code fabrizieren.
Ob es am ende funktioniert ist dann nicht garantiert, aber man investiert viel zeit da rein.
Wenn es nur im die Striche geht, würde ich mir überlegen, ob es denn wirklich so schlimm ist,
dass diese fehlen.
Anzeige
AW: Datei bitte...owT
13.07.2017 14:51:48
Werner
Hallo Silas,
in deiner Testdatei habe ich es damit raus gebracht:
Public Sub Leer_weg()
With Worksheets("Tabelle1").Columns(1)
.ClearFormats
End With
End Sub
Gruß Werner
AW: Datei bitte...owT
13.07.2017 15:27:31
Silas
Hallo zusammen,
ich möchte die Leerstellen gerne durch Stichpunkte ersetzen. Deshalb ist es auch wichtig abzufangen, wie viele Leerstellen vorm Text sind.
Ich habe schon eine Version ohne Stichpunkte geliefert, möchte aber trotzdem eine Version mit Stichpunkten entwickeln, um diese bei Bedarf zu liefern.
Ich werde mal ein bisschen rumprobieren, wie sinnvoll dieser Weg ist und was es vielleicht für Alternativen gibt. Falls euch noch was einfällt, könnt ihr es mich ja wissen lassen ;)
Ein großes Dankeschön an euch!
Gruß
Silas
Anzeige
AW: Datei bitte...owT
15.07.2017 10:03:14
Werner
Hallo Silas,
ich habe mal noch ein wenig herumexperimentiert. Versuch mal folgendes:
Public Sub Einrücken_raus()
Dim loLetzte As Long
Dim i As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1") 'Blattname anpassen
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To loLetzte
If .Cells(i, 1).HorizontalAlignment = xlLeft Then
.Cells(i, 1).Value = "-" & .Cells(i, 1).Value
End If
Next i
.Columns(1).HorizontalAlignment = xlGeneral
End With
Application.ScreenUpdating = True
End Sub
Gruß Werner
AW: Datei bitte...owT
15.07.2017 10:23:25
Werner
Hallo Silas,
nach nochmaligem lesen deiner Beiträge habe ich gemerkt, dass du ja wohl jeweils so viele - vor den Werten haben willst, wie "Leerzeichen" vorhanden sind.
Dann versuch es mal so:
Public Sub Einrücken_raus()
Dim loLetzte As Long
Dim loLevel As Long
Dim strEinrücker As String
Dim i As Long
Dim j As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1") 'Blattname anpassen
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To loLetzte
If .Cells(i, 1).HorizontalAlignment = xlLeft Then
loLevel = .Cells(i, 1).IndentLevel
For j = 1 To loLevel
strEinrücker = "-" & strEinrücker
Next j
.Cells(i, 1).Value = strEinrücker & .Cells(i, 1).Value
End If
strEinrücker = ""
Next i
.Columns(1).HorizontalAlignment = xlGeneral
End With
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige