Supportnet Computer
Planet of Tech

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

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

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.

Antwort 4 von fürLau

  • Zitat:
    *Gelöscht*
    Admininfo: siehe die SN Nutzungsbedingungen.


  • 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

    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

    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

    Antwort 8 von nighty

    hi all :)

    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 :-)

    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

    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