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

Chr160 per VBA ersetzen ändert String ab

Chr160 per VBA ersetzen ändert String ab
30.04.2019 15:39:24
Matthias
Hallo hier im Forum,
Ich habe ein Problem das Ersetzen des Chr160 per VBA betrifft.
Folgendes: Ich exportiere aus einem Programm eine Tabelle. Dies geht jedoch nur mittels einer HTML Datei. Während des Exports werden die Spalten jedoch einfach alle aneinander gereiht und leere Bereiche werden mit dem Chr160 aufgefüllt. Lese ich die Datei nun in Excel ein, dann erhalten ich in der ersten Zelle jeder Zeile einen String, der die gesamte Zeile aus dem Programm enthält. Ich habe es schon geschafft diesen per VBA und Text in Spalten mit festen Bereichen wieder zu trennen.
Nun zu meinem Problem. Als nächstes möchte ich die Chr160 durch normale Leerzeichen ersetzen sowie im selben Schritt in jeder Zelle vor und nachstehende Leerzeichen über Trim entfernen.
Dazu nutze ich folgenden Code, den ich im Netz gefunden und ein bisschen modifiziert habe:
Sub Chr160ersetzen()
Dim r As Range, c As Range
On Error Resume Next
Set r = Range("A1:H220")
On Error GoTo 0
If Not r Is Nothing Then
For Each c In r
c.Replace Chr(160), " ", xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
_
False, ReplaceFormat:=""
c.Value = Trim(LTrim(c.Value))
Next
End If
End Sub

Dieser Code Funktioniert grundsätzlich, aber:
mache Spalten enthalten Zahlen mit Tausendertrennung in dieser Form z.B.
SpalteA
80.700
56
3.650
SpalteB
56
65.000
51.510
SpalteC
561
5.654
355.561
Lasse ich den Code durchlaufen, dann wird daraus:
SpalteA
80,7
56
3,65
SpalteB
56
65
51,51
SpalteC
561
5,654
355,561
Das Tausendertrennzeichen wird also durch ein Komma ersetzt und die Werte somit verändert. Zusätzlich werden Werte im Hunderter, Zehner oder Einerbereich (also alle Werte ohne Trennzeichen) automatisch als Zahl erkannt. Die Veränderten Werte mit dem ersetzten Komma verbleiben jedoch als String. Lasse ich die Trim Funktion (die v.a. für Spalten mit Text gedacht ist) erst mal weg, dann hab ich das selbe Ergebnis.
Noch dazu kommt, dass nicht immer alle Tausendertrennzeichen durch Kommata ersetzt werden. es kommt also auch schon mal zu solch einer Darstellung
SpalteA
80.700
56
3,65
SpalteB
56
65
51.510
SpalteC
561
5,654
355,561
Es ist jedoch unbedingt erforderlich, dass die Zahlen alle in ihrem ursprünglichen Format bleiben.
Wenn ich statt des Codes manuell über Suchen und Ersetzten gehe und so das CHR160 durch ein normales Leerzeichen ersetze und anschließend Formatierung des Strings/Text in ein Zahlenformat ändere (egal ob manuell oder per VBA Code), dann bleiben alle Zahlen wie gewünscht in ihrem Format.
SpalteA
80.700
56
3.650
SpalteB
56
65.000
51.510
SpalteC
561
5.654
355.561
Irgendwo hakt es also am Replace. Ich komme leider nicht weiter. Ich habe auch schon versucht die Autoformatierungen? von Exel auszuschalten. Komme aber zu keinem brauchbaren Ergebniss.
Insgesamt habe ich über 2000 Sheets mit Daten, die so nach bearbeitet werden müssen. Ein manuelles Vorgehen ist also leider keine Option. Habt ihr eine Idee für mich?
Danke schon mal, Matthias

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

Betreff
Datum
Anwender
Anzeige
AW: Chr160 per VBA ersetzen ändert String ab
30.04.2019 16:18:53
UweD
Hast du mal versucht, den Gesamten Bereich zu ersetzeten und nicht per Schleife jede Zelle einzeln.
so in der Art:
    Dim r As Range
    On Error Resume Next
    Set r = Range("A1:H220")
    On Error GoTo 0
    
    r.Replace Chr(160), " ", xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

LG UweD
Anzeige
AW: Chr160 per VBA ersetzen ändert String ab
30.04.2019 16:27:23
Matthias
Hallo Uwe,
danke für deine Anmerkung. Bringt jeodoch das selbe Ergebnis.
ich habe gerade versucht einen Umweg zu gehen und in je zelle zunächst ein ' zu schreiben, dann die Chr160 zu ersetzen und anschließend das' wieder zu entfernen. Jedoch auch hier das selbe Ergebnis.#
Mfg Matthias
AW: Chr160 per VBA ersetzen ändert String ab
30.04.2019 17:27:32
Günther
Moin Matthias,
da ich keine VBA-verdächtigten Fieles von fremden Quellen herunter lade, kann ich nur schätzen …
Ich behaupte, dass das mit Power Query problemlos machbar ist, wenn nicht weitere hier nicht geschilderte Umstände "auftauchen".
Gruß
Günther
AW: Chr160 per VBA ersetzen ändert String ab
30.04.2019 17:11:06
Daniel
Hi
dann mach doch folgendes:
verwende TEXT IN SPALTEN und gib das 160er-Zeichen als Trennzeichen ein.
die Eingabe in das Feld machst du, indem du die ALT-Taste gedrückt hälst und 0160 auf dem Num-Block eintippst.
Zusätzlich gibst du an, dass sich wiederholende Trennzeichen wie eines behandelt werden sollen.
wenn du das TEXT IN SPALTEN per Makro ausführen lässt musst du zusätzlich angeben, dass du das Komma als Dezimal- und den Punkt als Tausendertrennzeichen hast.
das geht im Schritt 3 unter "Weitere"
führt man die Aktion von Hand aus, braucht man das nicht, weil Excel dann das landestypische Zahlenformat verwendet.
machst du das TEXT IN SPALTEN per Makro, muss man es angeben, weil ansonsten die Amerikanischen Formate verwendet werden (dh wenn du dir den Code aufzeichnest, solltest du die Trennzeichen auch explizit angeben, damit das im Code auch erscheint)
sollte das nicht funkionieren, weil in dem Block leere Zellen vorhanden sind und es so zu Verschiebungen kommen könnte, musst du für die Nachbereitung so vorgehen:
1. Tausendertrennzeichen löschen (die brauchst du eh nicht)
2. Kommas durch Punkte ersetzen (damit die Zahl im amerikanischen Format da steht, ist für das Makro)
3. Zeichen mit Code 160 durch nichts ersetzen.
sieht als Code so aus, eine Schleife brauchst du nicht:
with Range("A1:H220")
.Replace ".", "", xlpart
.Replace ",", ".", xlpart
.Replace Chr(160), "", xlpart
End With

Gruß Daniel
Anzeige
AW: Chr160 per VBA ersetzen ändert String ab
30.04.2019 20:42:19
Matthias
Hallo Zusammen,
ich konnte das Problem lösen. Daniel hat mich auf die richtige Idee gebracht. Wenn ich das an dieser Stelle wirklich unnötige Tausendertrennzeichen zuerst rausschneide über
c.Replace ".", "", xlpart,
dann kann ich meinen Code sonst auch so stehen lassen und alles funktioniert wunderbar.
Ich verstehe zwar nach wie vor nicht, warum Excel manche Zellen automatisch formatiert, andere aber nicht und das gefühlt ziemlich willkürlich. Da ich das Problem aber so Umgehen konnte soll es mir recht sein.
Die Lösung kann so einfach sein.
Vielen Dank trotzdem an alle.
Schönen Abend Matthias
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige