Trim-Befehl wirft "." und "," durcheinander
#1
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.


Angehängte Dateien
.xlsm   Trimproblem.xlsm (Größe: 15,96 KB / Downloads: 7)
Top
#2
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
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Daniel.Haering
Top
#3
Hallo Daniel,

teste mal so:

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

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Daniel.Haering
Top
#4
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Daniel.Haering
Top
#5
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
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste