Clever-Excel-Forum

Normale Version: Trim-Befehl wirft "." und "," durcheinander
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich füge aus einer txt-Datei mehrere Zeilen ein, habe da verschiedene Formate (Text und Zahlen) und auf nachstehende (bzw. voranstehende) Leerzeichen.

Zwingend muss ich die Werte in ein anderes Tabellenblatt kopieren.

um die Leerzeichen zu entfernen verwende ich den Trim-Befehl (VBA. steht voraus weil der zuerst nicht funktioniert hat)

Das Problem an der Sache ist, dass aus der Kommazahl durch den Trimbefehl eine Zahl ohne Komma erzeugt wird -

--> Aus "17,852777" wird "17.852.777"

Gibt es da einen Befehl den ich da leicht einfügen kann, dass der Wert "Deutsch" verwendet wird?

Wäre für eure Hilfe sehr dankbar,

Grüße
 Daniel

Ach ja - eine Datei mit dem Beispiel hab ich angehängt.
Hallo,

Trim löscht führende und nachgestellte Leerstellen.

Mit Replace kannst Du alle entfernen.

Hier mal ein Vorschlag, wie Du es umsetzen könntest:

Code:
Sub Glaetten()
'
Dim i As Integer
i = 1

Do While Cells(i, 2) <> ""
  If IsNumeric(Cells(i, 1)) Then
  Cells(i, 1) = CDbl(Replace(Cells(i, 2).Value, " ", ""))
  Else
   Cells(i, 1) = Replace(Cells(i, 2).Value, " ", "")
  End If
  i = i + 1
Loop
End Sub
Hallo Daniel,

teste mal so:

Code:
Cells(i, 1).Value = Application.Trim(Replace(Cells(i, 1).Text, ",", "."))

Gruß Uwe
Hallöchen,

die Zahl ist für Excel durch den Trimbefehl ein Text. Anschließend versucht Excel, beim Eintrag in die Zelle daraus wieder eine Zahl zu machen. Da VBA "englisch" arbeitet, und im englischen das Komma ein Tausendertrennzeichen ist, werden die deutschen Tausendertrenner gesetzt.

Du kannst Excel wahrscheinlich auch ohne Replace austricksen:

Code:
Sub Glaetten()
'
Dim i As Integer
i = 1

Do While Cells(i, 1) <> ""
   If IsNumeric(Cells(i, 1).Value) Then
      Cells(i, 1).Value = Str(Trim(Cells(i, 1)))
   Else
      Cells(i, 1).Value = Trim(Cells(i, 1))
   End If
   i = i + 1
Loop
End Sub
Servus,

vielen Dank für eure Hilfe - meine Lösung schaut jetzt so aus:


Code:
           i = 1
           j = 1
           Do While Cells(i, j) <> ""
               Do While Cells(i, j) <> ""
                   If IsNumeric(Cells(i, j).Value) Then
                       Cells(i, j).Value = VBA.Str(VBA.Trim(Cells(i, j)))
                   Else
                       Cells(i, j) = VBA.Trim(Cells(i, j))
                   End If
                   j = j + 1
               Loop
               j = 1
               i = i + 1
           Loop
Damit gehe ich Zeile für Zeile nach unten bis eine leere Zeile erreicht wird (in Spalte A ist wenn dann immer text) und dann gehe ich so lange nach rechts bis die erste leere Spalte erreicht wird.

Grüße
 Daniel