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

Einzelne Zeichen aus Zelle löschen...

Einzelne Zeichen aus Zelle löschen...
16.04.2015 18:55:52
Mirko
Hallo,
ich habe ein kleines Problem.
Ich habe eine Zelle mit Text, aus der ich mittels VBA bestimmte Zeichen löschen muss. Hierbei ist jedoch nicht das Zeichen selbst, sondern die Formatierung des Zeichens ausschlaggebend.
Beispiel:
Eine Zelle enthält überwiegend schwarzen Text, innerhalb des Textes gibt es aber rot-durchgestrichene Wörter. Diese sollen entfernt werden.
Daher arbeite ich mit der Cells.Character-Eigenschaft. Solange die Zelle Text unterhalb von 256 Zeichen beinhaltet funktioniert alles wunderbar, aber ab 257 Zeichen passiert entweder nichts oder, es gibt den Fehler 1004.
Code-Beispiel:
Sub CharDelete()
ChAnz = ActiveCell.Characters.Count
For z = 1 To ChAnz
If ActiveCell.Characters(z, 1).Font.ColorIndex = 3 _
And ActiveCell.Characters(z, 1).Font.Strikethrough = True Then
ActiveCell.Characters(z, 1).Delete
ChAnz = ChAnz - 1
z = z - 1
End If
Next
End Sub
Diese Beschränkung gilt nur die Delete-Funktion, wenn ich statt

ActiveCell.Characters(z, 1).Delete

den Befehl

ActiveCell.Characters(z, 1).Font.Bold = True

verwende, funktioniert es wunderbar auch bei mehr als 256 Zeichen.
Hat jemand eine Idee, wie ich diese Beschränkung umgehen kann. Gern auch ein anderer Lösungsansatz, immer unter Beibehaltung der unterschiedlichen Formatierung des Zell-Textes (Farbe, Form, etc.)
Danke und Gruß
Mirko

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einzelne Zeichen aus Zelle löschen...
16.04.2015 20:45:45
Nepumuk
Hallo,
bei mir löscht dein Makro bei längeren Zelleinträgen nichts mehr und damit laufe ich in eine Endlosschleife. Ist Rot und Durchgestrichen das einzige Ausnahmeformat oder gibt's noch andere die unbedingt erhalten bleiben müssen?
Gruß
Nepumuk

AW: Einzelne Zeichen aus Zelle löschen...
16.04.2015 22:23:20
Mirko
Ja, kursiv und fett, kommt auch vor, sollte also auch erhalten bleiben. Nur Rot-durchgestrichen soll aus der Zelle entfernt werden.

AW: Einzelne Zeichen aus Zelle löschen...
16.04.2015 21:13:06
Gerd
Hallo,
ich sehe da eher ein Problem beim verwendeten Schleifenkonstrukt mit eingebauter Zählerreduzierung als 257 u. mehr Zeichen.
Sub CharDelete2()
Dim ChAnz As Long, Z As Long
With ActiveCell
ChAnz = .Characters.Count
For Z = ChAnz To 1 Step -1
With .Characters(Z, 1)
If .Font.ColorIndex = 3 Then
If .Font.Strikethrough = True Then
.Delete
End If
End If
End With
Next
End With
End Sub
Gruß Gerd

Anzeige
AW: Einzelne Zeichen aus Zelle löschen...
16.04.2015 21:24:39
Nepumuk
Hallo Gerd,
selbes Ergebnis, bei mehr wie 256 Zeichen in der Zelle läuft die Delete-Methode ins Leere. Sprich es wird kein Zeichen gelöscht. Ich hab Excel 2013.
Gruß
Nepumuk

AW: Einzelne Zeichen aus Zelle löschen...
16.04.2015 22:41:48
Mirko
Hallo Gerd,
Danke für deine Antwort. Ich glaube allerdings nicht das die Schleife das Problem ist, auch wenn sie in der Tat nicht optimal ist.
Es ist einfach nicht möglich ein Zeichen oder eine Zeichenkette mit Hilfe der Characters.Delete-Eingenschaft zu löschen, wenn die Zelle mehr als 256 Zeichen enthält. Ich hab es mit allen Excel-Versionen von 2003-2013 versucht, ohne Erfolg.
Gruß Mirko

Anzeige
AW: Einzelne Zeichen aus Zelle löschen...
16.04.2015 21:14:36
Daniel
Hi
wenn das direkte Löschen der Zeichen nicht funktioniert,
dann probiers mal mit folgendem Workaround:
1. merke dir in einer Schleife für jeden Buchstaben der nicht gelöscht werden soll den den Buchstaben und die benötigten Formate (du musst für jede relevante Formatart eine Variable anlegen)
2. schreibe dein neuen Text in die Zelle und formatiere entsprechend den gespeicherten Werten:
hier der Code dazu:

Sub RotDgEntfernen()
Dim txt1 As String, txt2 As String
Dim i As Long, x As Long
'--- zu speichernde Formate
Dim FoFarbe() As Long
Dim FoFett() As Boolean
Dim FoItalic() As Boolean
Dim FoSize() As Long
txt1 = Zelle.Value
With ActiveCell
txt1 = .Text
ReDim FoFarbe(1 To Len(txt1))
ReDim FoFett(1 To Len(txt1))
ReDim FoItalic(1 To Len(txt1))
ReDim FoSize(1 To Len(txt1))
'--- Format und Text Speichern
For i = 1 To Len(txt1)
With .Characters(i, 1).Font
If .Strikethrough = True And .ColorIndex = 3 Then
Else
x = x + 1
txt2 = txt2 & .Parent.Text
FoFarbe(x) = .ColorIndex
FoFett(x) = .Bold
FoItalic(x) = .Italic
FoSize(x) = .Size
End If
End With
Next
'--- neuen Text in Zelle schreiben
.Value = txt2
'--- Zeichen formatieren
For i = 1 To Len(txt2)
With .Characters(i, 1).Font
.ColorIndex = FoFarbe(i)
.Bold = FoFett(i)
.Italic = FoItalic(i)
.Size = FoSize(i)
End With
Next
End With
End Sub
Gruß Daniel

Anzeige
AW: Einzelne Zeichen aus Zelle löschen...
16.04.2015 22:53:02
Mirko
Hallo Daniel,
Danke für die Antwort. Ja, an die Variante alle Zeicheninformationen zu sichern, hatte ich auch schon gedacht, hatte aber bisher den Aufwand gescheut. Zudem wird diese Variante sicherlich etwas weniger performant sein. Es handelt sich um mehrere Dateien, die viele Texte und oft auch mehrere Blätter enthalten. Ich werde aber wohl nicht um diese Variante rumkommen.
Gruß Mirko

AW: Einzelne Zeichen aus Zelle löschen...
16.04.2015 23:38:45
Daniel
Hi
schneller und Performanter wäre sicherlich, die Formatierung nicht für jedes Zeichen einzeln zu sichern, sonderen so wie die formatierung auch gesetzt wird mit von-bis.
aber hierfür wird der Programmieraufwand sicherlich höher sein.
Gruß Daniel

Anzeige
Tja, dann mach mal, ...
17.04.2015 00:28:31
Luc:-?
…Mirko! ;-)
Was heißt weniger performant? Weniger als gar nichts und dafür 'ne Endlosschleife…? ;->
Das folgende Bsp zu erzeugen, hat kaum 'ne Sekunde erfordert, obwohl viel mehr Formatie­rungens­items abgefragt wurden (das Schreiben des Pgms allerdings wesentlich mehr!):
 A
10Hallo, ich habe ein kleines Problem. Ich habe eine Zelle mit Text, aus der ich mittels VBA bestimmte Zeichen löschen muss. Hierbei ist jedoch nicht das Zeichen selbst, sondern die Formatierung des Zeichens ausschlaggebend.
Beispiel: Eine Zelle enthält überwiegend schwarzen Text, innerhalb des Textes gibt es aber rot-durchgestrichene Wörter. Diese sollen entfernt werden. Daher arbeite ich mit der Cells.Character-Eigenschaft. Solange die Zelle Text unterhalb von 256 Zeichen beinhaltet, funktioniert alles wunderbar, aber ab 257 Zeichen passiert
entweder nichts oder es gibt den Fehler 1004.

Gruß, Luc :-?

Anzeige
Stringlänge
17.04.2015 05:35:07
lupo1
http://www.xlam.ch/xlimits/ (Limit Nr. 9) sagt:
"mal 37676, mal 1024, mal 256 Zeichen Länge in Excel, Unterschiede in einzelnen Versionen ... eigene VBA-Sektion siehe dort"
256 Zeichen in VBA ist jedenfalls eine häufige max. Stringlängengrenze. Z.B. xl2000, VBA-Function mit String-Argument UND -Rückgabewert. Die Rückgabe des durch die Function verlängerten Strings klappt noch über 256 Zeichen, aber dann als Argument in der nächsten Funktion nicht mehr (aber nicht zuverlässig, manchmal rutscht die Grenze etwas höher).
Vermutlich gesichert: Teilformatierte Strings haben "kleiner gleich große" Möglichkeiten wie ganzformatierte.

Anzeige
AW: Einzelne Zeichen aus Zelle löschen...
17.04.2015 07:54:19
haw
Hallo Mirko,
eine weitere Möglichkeit:
Sub CharDelete_2()
Dim ChAnz%, z%, tmp$, x$
ChAnz = ActiveCell.Characters.Count
x = ActiveCell.Value
For z = 1 To ChAnz
If ActiveCell.Characters(z, 1).Font.ColorIndex  3 _
And ActiveCell.Characters(z, 1).Font.Strikethrough = False Then
tmp = tmp & Mid(x, z, 1)
End If
Next
ActiveCell.Value = tmp
End Sub
Gruß
Heinz

AW: Einzelne Zeichen aus Zelle löschen...
17.04.2015 10:14:00
Mirko
Hallo Heinz,
danke für deinen Lösungsvorschlag, doch leider geht die Formatierung der anderen Texte, welche nicht gelöscht werden verloren. Du speicherst in der Variable "tmp" ja nur das Zeichen, aber keine Fontinformation (Farbe, Fett, kursiv etc.).
Danke Trotzdem und Gruß
Mirko
Anzeige

342 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige