Supportnet / Forum / Tabellenkalkulation
Zahl wird unbrauchbar nach Punkt durch Komma ersetzungs Macro
Frage
Hallo zusammen,
ich muss ziemlich viel aus Warenwirtschaftssystemen in Excel kopieren. Diese laufen mit der englischen Art und das trennzeichen ist ein Punkt und keine Komma. Wie viele wissen funktioniert das dann mit deutscher Ländereinstellung nicht. (Und ständig umstellen möchte ich nciht)
Bißlang benutze ich einfach die Suchen/Ersetzen Funktion und ersetze somit den Punkt durch ein Komma. Anschließend formatierung in Währung und alles ist wunderbar.
Das ganze habe ich nun in ein Macro geschrieben das wie folgt aussieht:
Selection.Replace What:=".", Replacement:=","
So, wende ich nun dieses Macro an, werden die Zahlen nicht mehr als Zahlen erkannt und sind nicht mehr formatierbar. Es ist, als werden diese dann als text erkannt. Sie bleiben auch nach einer Formatierung z. B. als Währung auf der linken Seite stehen.
Das verstehe ich nicht. Kann mir jemand helfen?
vielen Dank
Antwort 1 von Rebusss
Habe gerade eben noch etwas herausgefunden: Nachdem ich das Macro ausgeführt habe, erscheint auhc oben links ein grüner Pfeil. Gehe ich auf die Zelle erscheint das Ausrufezeichen und ich kann dann im ausrufezeichen "convert to number" anklicken. Dann habe ich wieder meine Zahl.
Das ganze wollte ich nun mit einem Macro aufzeichnen lassen aber das nimmt er mir in dem Macro nciht auf :-(
Irgendwelche ideen?
Vielen Dank
Das ganze wollte ich nun mit einem Macro aufzeichnen lassen aber das nimmt er mir in dem Macro nciht auf :-(
Irgendwelche ideen?
Vielen Dank
Antwort 2 von CaroS
Hallo Rebusss,
Du kannst es ja mal mit folgender Erweiterung Deines Makros versuchen:
Selection.Replace What:=".", Replacement:=","
Dim z As Range
For Each z In Application.Selection
z.Value = CDbl(z.Value)
Next
Ich gehe davon aus, dass Selection zuvor einen sinnvollen Wert hatte, in dem die Ersetzung stattgefunden hat. Leider konnte ich Deine Fehlersituation bei mir nicht genau nachbilden, so dass ich mir auch nicht sicher bin, ob das hilft. Einen Versuch ist es wert.
Gruß,
CaroS
Du kannst es ja mal mit folgender Erweiterung Deines Makros versuchen:
Selection.Replace What:=".", Replacement:=","
Dim z As Range
For Each z In Application.Selection
z.Value = CDbl(z.Value)
Next
Ich gehe davon aus, dass Selection zuvor einen sinnvollen Wert hatte, in dem die Ersetzung stattgefunden hat. Leider konnte ich Deine Fehlersituation bei mir nicht genau nachbilden, so dass ich mir auch nicht sicher bin, ob das hilft. Einen Versuch ist es wert.
Gruß,
CaroS
Antwort 3 von Rebusss
Hallo CaorS,
das habe ich doch sofort probiert und es hat tatsächlich geklappt. Allerdings mit einem kleinen Nachteil.
Ich habe als ca. 2 - 10 tausend Zeilen voll mit den Zahlen. Zur Einfachheit markiere ich dann einfach die komplette Spalte und benutze die Suchen und ersetzen Funktion.
Wenn ich dann nun dein Makro benutze, funktioniert es zwar aber er füllt mir alle Zeilen bis 65 tausend mit Nuller auf. Und das könnte dann bei sortierungen etc. zu Problemen führen.
Hast du noch eine Idee um das Mako zu erweitern damit er mir wirklich nur die existierenden Zahlen behandelt?
Vielen Dank
P. S. Was ich allerdings sehr komisch finde ist, das du mein Fehlerbild nciht nachvollziehen kannst. Ich benutze Excel 2002 SP3.
das habe ich doch sofort probiert und es hat tatsächlich geklappt. Allerdings mit einem kleinen Nachteil.
Ich habe als ca. 2 - 10 tausend Zeilen voll mit den Zahlen. Zur Einfachheit markiere ich dann einfach die komplette Spalte und benutze die Suchen und ersetzen Funktion.
Wenn ich dann nun dein Makro benutze, funktioniert es zwar aber er füllt mir alle Zeilen bis 65 tausend mit Nuller auf. Und das könnte dann bei sortierungen etc. zu Problemen führen.
Hast du noch eine Idee um das Mako zu erweitern damit er mir wirklich nur die existierenden Zahlen behandelt?
Vielen Dank
P. S. Was ich allerdings sehr komisch finde ist, das du mein Fehlerbild nciht nachvollziehen kannst. Ich benutze Excel 2002 SP3.
Antwort 4 von fürLau
Antwort 5 von CaroS
Hallo,
ich schreibe mal noch eine Kleinigkeit dazu:
Range("C2:C" & CStr(Range("C65536").End(xlUp).Row)).Select
Selection.Replace What:=".", Replacement:=","
Dim z As Range
For Each z In Application.Selection
If IsNumeric(z.Value) Then z.Value = CDbl(z.Value)
Next
Damit werden nur die Zellen behandelt, in denen eine Zahl steht, aber Zellen mit Datum und eventuell vorhandene leere Zellen zwischendrin nicht.
Gruß,
CaroS
ich schreibe mal noch eine Kleinigkeit dazu:
Range("C2:C" & CStr(Range("C65536").End(xlUp).Row)).Select
Selection.Replace What:=".", Replacement:=","
Dim z As Range
For Each z In Application.Selection
If IsNumeric(z.Value) Then z.Value = CDbl(z.Value)
Next
Damit werden nur die Zellen behandelt, in denen eine Zahl steht, aber Zellen mit Datum und eventuell vorhandene leere Zellen zwischendrin nicht.
Gruß,
CaroS
Antwort 6 von CaroS
Hallo Rebusss,
hier noch die Erklärung zu den weniger wichtigen Dingen: Ich hatte geschrieben, das "ich Deine Fehlersituation bei mir nicht genau nachbilden" konnte, ich habe nicht gemeint, dass ich Deine Fehlersituation nicht nachvollziehen kann. Das Nachvollziehen findet mehr im Geist statt, da geht´s bei mir immer noch so einigermaßen. Etwas anderes sind die konkreten Excel-Dinge.
Um etwas genau nachzubilden müsste man es genau kennen - schon daran scheitert es. Ich weiß ja nicht, was für Zahlen wie in Dein Tabellenblatt gekommen sind. Außerdem lässt sich Excel, wenn ich mir mal ganz auf die Schnelle ein kleines Beispiel herstellen will, bei der Eingabe von Zahlen auch manchmal ein paar lustige Dinge einfallen. Damit Du siehst, was so passieren kann, gib einfach mal die 4 Zahlen 17.05, 17.10, 17.15 und 17.20 erst in zuvor (!) standardformatierte Zellen, danach in zuvor (!) zahlformatierte Zellen und dann in zuvor (!) textformatierte Zellen ein. Alles klar oder hast Du Fragen?
Da Du Deine Zellen wahrscheinlich schon mehrfach hin- und herformatiert hast, kann ich mir ziemlich sicher sein, dass ich bei mir nicht genau dieselbe Situation erwische wie in Deinem Tabellenblatt. Also muss ich mit Lösungsvorschlägen entsprechend vorsichtig sein. (Ansonsten nutze ich auch Excel 2002 SP3.)
Gruß,
CaroS
hier noch die Erklärung zu den weniger wichtigen Dingen: Ich hatte geschrieben, das "ich Deine Fehlersituation bei mir nicht genau nachbilden" konnte, ich habe nicht gemeint, dass ich Deine Fehlersituation nicht nachvollziehen kann. Das Nachvollziehen findet mehr im Geist statt, da geht´s bei mir immer noch so einigermaßen. Etwas anderes sind die konkreten Excel-Dinge.
Um etwas genau nachzubilden müsste man es genau kennen - schon daran scheitert es. Ich weiß ja nicht, was für Zahlen wie in Dein Tabellenblatt gekommen sind. Außerdem lässt sich Excel, wenn ich mir mal ganz auf die Schnelle ein kleines Beispiel herstellen will, bei der Eingabe von Zahlen auch manchmal ein paar lustige Dinge einfallen. Damit Du siehst, was so passieren kann, gib einfach mal die 4 Zahlen 17.05, 17.10, 17.15 und 17.20 erst in zuvor (!) standardformatierte Zellen, danach in zuvor (!) zahlformatierte Zellen und dann in zuvor (!) textformatierte Zellen ein. Alles klar oder hast Du Fragen?
Da Du Deine Zellen wahrscheinlich schon mehrfach hin- und herformatiert hast, kann ich mir ziemlich sicher sein, dass ich bei mir nicht genau dieselbe Situation erwische wie in Deinem Tabellenblatt. Also muss ich mit Lösungsvorschlägen entsprechend vorsichtig sein. (Ansonsten nutze ich auch Excel 2002 SP3.)
Gruß,
CaroS
Antwort 7 von nighty
hi al :)
es bedarf keiner schleife :)
gruss nighty
Option Explicit
Sub test()
Sheets(1).Range("C1:C" & CDbl(Range("C" & Rows.Count).End(xlUp).Row)).Replace What:=".", Replacement:=","
End Sub
es bedarf keiner schleife :)
gruss nighty
Option Explicit
Sub test()
Sheets(1).Range("C1:C" & CDbl(Range("C" & Rows.Count).End(xlUp).Row)).Replace What:=".", Replacement:=","
End Sub
Antwort 8 von nighty
hi all :)
leider wenig zeit in letzter zeit :(
gruss nighty
leider wenig zeit in letzter zeit :(
gruss nighty
Antwort 9 von Rebusss
Hallo zusammen,
vielen lieben Dank dafür. Ihr habt mir wirklich sehr geholfen.
Kann man denn -anstatt anzunehmen das alle Zahlen in C stehen, eine art Platzhalter einbinden der abfrägt in welcher Spalte die Zahlen stehen?
Ich stelle mir z. B. vor, das ich das Macro in meine Symbolleiste einbinde und dann einfach darauf klicke. Anschließend frägt er mich in welche Spalte die Zahlen stehen, ich gebe C (oder was auch immer) an und die Zahlen werden berichtigt. Das wäre klasse :-)
vielen lieben Dank dafür. Ihr habt mir wirklich sehr geholfen.
Kann man denn -anstatt anzunehmen das alle Zahlen in C stehen, eine art Platzhalter einbinden der abfrägt in welcher Spalte die Zahlen stehen?
Ich stelle mir z. B. vor, das ich das Macro in meine Symbolleiste einbinde und dann einfach darauf klicke. Anschließend frägt er mich in welche Spalte die Zahlen stehen, ich gebe C (oder was auch immer) an und die Zahlen werden berichtigt. Das wäre klasse :-)
Antwort 10 von JoeKe
Moin Rebusss,
ja so:
Option Explicit
Sub test()
Dim Spalte As String
Spalte = InputBox("Gib eine Spalte an!", "Welche Spalte?")
Sheets(1).Range(Spalte & "1:" & Spalte & CDbl(Range(Spalte & _ Rows.Count).End(xlUp).Row)).Replace What:=".", Replacement:=","
End Sub
Gruß
JöKe
ja so:
Option Explicit
Sub test()
Dim Spalte As String
Spalte = InputBox("Gib eine Spalte an!", "Welche Spalte?")
Sheets(1).Range(Spalte & "1:" & Spalte & CDbl(Range(Spalte & _ Rows.Count).End(xlUp).Row)).Replace What:=".", Replacement:=","
End Sub
Gruß
JöKe
Antwort 11 von CaroS
Hallo allerseits!
In der Frage und in der Antwort 1 schien es so, dass es nach erfolgreicher Ersetzung um die (Rück-)Umwandlung in eine Gleitkommazahl geht.
Ab AW7 scheint das überhaupt keine Rolle mehr zu spielen, und das verstehe ich leider nicht. Und auch nicht, was das CDbl(.) mit der Spaltenzahl
Range(Spalte & Rows.Count).End(xlUp).Row
anstellen soll.
Ich baue die Spaltenabfrage ein und bleibe bei
Sub Ersetzen()
Dim Spalte As String
Spalte = InputBox("Gib eine Spalte (A .. IV) an!","In welcher Spalte soll ersetzt werden?")
ActiveSheet.Range(Spalte & "1:" & Spalte & CStr(Range(Spalte & "65536").End(xlUp).Row)).Select
Selection.Replace What:=".", Replacement:=","
Dim z As Range
For Each z In Application.Selection
If IsNumeric(z.Value) Then z.Value = CDbl(z.Value)
Next
End Sub
Gruß,
CaroS
In der Frage und in der Antwort 1 schien es so, dass es nach erfolgreicher Ersetzung um die (Rück-)Umwandlung in eine Gleitkommazahl geht.
Ab AW7 scheint das überhaupt keine Rolle mehr zu spielen, und das verstehe ich leider nicht. Und auch nicht, was das CDbl(.) mit der Spaltenzahl
Range(Spalte & Rows.Count).End(xlUp).Row
anstellen soll.
Ich baue die Spaltenabfrage ein und bleibe bei
Sub Ersetzen()
Dim Spalte As String
Spalte = InputBox("Gib eine Spalte (A .. IV) an!","In welcher Spalte soll ersetzt werden?")
ActiveSheet.Range(Spalte & "1:" & Spalte & CStr(Range(Spalte & "65536").End(xlUp).Row)).Select
Selection.Replace What:=".", Replacement:=","
Dim z As Range
For Each z In Application.Selection
If IsNumeric(z.Value) Then z.Value = CDbl(z.Value)
Next
End Sub
Gruß,
CaroS