Hallo zusammen,
der folgende Code entfernt mir führende Apostrophzeichen aus
meinem Tabellenblatt:
Option Explicit
Sub test()
Dim z As Range
For Each z In Range(„A2:A41“)
z.NumberFormat = „General“
z.Value = CStr(z.Text)
Next
End Sub
Zahlen sollten nicht geändert werden (alles als Standard formatiert).
Nun ändert er mir aber Zahlen, die
- vor dem Komma > 0 sind und/oder
- nach dem Komma mehr als 2 Stellen haben
Beispiel:
1,5 bleibt unverändert
0,012 bleibt unverändert
aus 3 (Format Standard) wird 3 (Format Zahl)
aus 4,128(Format Standard) wird 4.128(Format Zahl)
Er macht aus dem Komma einen Punkt.
Das ist übel, wenn aus 4,128 kW plötzlich 4.128 werden… 
Weiß vielleicht jemand, woran es liegen könnte?
Gruß und danke für Hilfe
Rolf
Grüezi Rolf
der folgende Code entfernt mir führende Apostrophzeichen aus
meinem Tabellenblatt:
[Code gesnippt]
Zahlen sollten nicht geändert werden (alles als Standard
formatiert).
Nun ändert er mir aber Zahlen, die
- vor dem Komma > 0 sind und/oder
- nach dem Komma mehr als 2 Stellen haben
Beispiel:
1,5 bleibt unverändert
0,012 bleibt unverändert
aus 3 (Format Standard) wird 3 (Format Zahl)
aus 4,128(Format Standard) wird 4.128(Format Zahl)
Er macht aus dem Komma einen Punkt.
Das ist übel, wenn aus 4,128 kW plötzlich 4.128 werden… 
Weiß vielleicht jemand, woran es liegen könnte?
Aber ja doch - Du wandelst mir CStr() deine WErte in Text um und schreibst diese dann zurück in die Zellen (einige Daten bleiben dann auch als Text in den Zellen stehen). Damit überlässt Du Excel die Zuordnung der Werte und es wird eine implizite Typenumwandlung vorgenommen, die halt manchmal schief geht.
Wandle die Daten in Doubles um, dann ist das Problem keines mehr:
Sub test()
Dim z As Range
For Each z In Range("A2:A41")
If Not z.Value = "" Then
z.NumberFormat = "General"
z.Value = CDbl(CStr(z.Text))
End If
Next
End Sub
Mit freundlichen Grüssen
Thomas Ramel
Hi Rolf,
da macht die Automatik, was sie soll: Du weist mit
z.Value=CStr(z.Text)
einem Double-Wert einen Text zu. Und sogar noch einen doppelten:
?Typename(ActiveCell.Text)
im Direktfenster zeigt, daß z.Text schon ein String ist. Daß der dann, weil er die amerikanischen Tausenderktrnnzeichen und kein Dezimaltrennzeichen enthält, automatisch vertausendfacht wird, ist vollkommen korrekt.
Probier’s 'mal mit
z.Value = Val(z.Text)
HTH.
Markus
Danke 
Hallo zusammen,
vielen Dank für die wie immer prompte Hilfe.
Ich kann es leider am Montag erst testen und
mache dann eine Erfolgsmeldung.
Danke, Gruß und schönen Sonntag.
Rolf
der folgende Code entfernt mir führende Apostrophzeichen aus
meinem Tabellenblatt:
[Code gesnippt]
Zahlen sollten nicht geändert werden (alles als Standard
formatiert).
Nun ändert er mir aber Zahlen, die
- vor dem Komma > 0 sind und/oder
- nach dem Komma mehr als 2 Stellen haben
Beispiel:
1,5 bleibt unverändert
0,012 bleibt unverändert
aus 3 (Format Standard) wird 3 (Format Zahl)
aus 4,128(Format Standard) wird 4.128(Format Zahl)
Er macht aus dem Komma einen Punkt.
Aber ja doch - Du wandelst mir CStr() deine WErte in Text um
und schreibst diese dann zurück in die Zellen (einige Daten
bleiben dann auch als Text in den Zellen stehen). Damit
überlässt Du Excel die Zuordnung der Werte und es wird eine
implizite Typenumwandlung vorgenommen, die halt manchmal
schief geht.
Wandle die Daten in Doubles um, dann ist das Problem keines
mehr:
Sub test()
Dim z As Range
For Each z In Range(„A2:A41“)
If Not z.Value = „“ Then
z.NumberFormat = „General“
z.Value = CDbl(CStr(z.Text))
End If
Next
End Sub
Moin Thomas,
noch nicht so ganz…
bei der Zeile
z.Value = CDbl(CStr(z.Text))
meckert er: Typen unverträglich.
(was ist „CDbl“?)
Hast Du noch eine Idee?
Gruß
Rolf
Hi Markus,
Probier’s 'mal mit
z.Value = Val(z.Text)
Damit setzt er mir fast alle Spalten auf Null, einschließlich Spaltenüberschriften. In meiner „kW-Spalte“ bleibt nur das stehen,
was größer 1 ist.
Gruß
Rolf
Hallo Rolf,
macht XL bei mir auch. Funktionieren tut’s bei mir (XL XP) aber mit:
z.Value = z.Text
was mir eine kleine Gänsehaut macht (impolizite Typenkonversion statt expliziter, weil die explizite an Automatismen scheitert — oder irre ich da?).
Allerdings formatiert das XL dann die Ergebniszellen als Text, was Du schneller manuell entfernen kannst.
It’s not a bug, it’s a feature.
Für mich gilt das umgekehrte immer mehr für die Automatismen von Excel. Die sind den konkreten Problemen m.E. genauso angemessen, wie wenn man tags mit einem VW Käfer eine Tonne Sand auf die Baustelle transportieren will und abends mit dem Lastkraftwagen in die Oper fahren will. 
HTH.
Markus
________________
Und Sterne…
Hallo Rolf,
Sub test()
Dim z As Range
For Each z In Range(„A2:A41“)
If Not z.Value = „“ Then
z.NumberFormat = „General“
z.Value = CDbl(CStr(z.Text))
End If
Next
End Sub
noch nicht so ganz…
bei der Zeile
z.Value = CDbl(CStr(z.Text))
meckert er: Typen unverträglich.
ist Spalte A komplett leer kommt kein Fehler.
Steht in A2:A5
2.3
2,4
2;5
2:6
wird das von Excel interpretiert, aber ohne Fehlermeldung.
Steht aber z.B. ein Buchstabe in A6 erzeugt es den Fehler, weil Excel ja nicht in Cdbl umwandeln kann.
(was ist „CDbl“?)
Sag ich nicht
Oder ist deine F1-Taste defekt?
Gruß
Reinhard
Hallo Markus,
Funktionieren tut’s bei mir (XL XP)
aber mit:
z.Value = z.Text
Bei mir nicht, er macht aus 13,180 wieder 13.180
(Win XP und XL 2000)
Gruß
Rolf
Hallo Reinhard,
Sub test()
Dim z As Range
For Each z In Range(„A2:A41“)
If Not z.Value = „“ Then
z.NumberFormat = „General“
z.Value = CDbl(CStr(z.Text))
End If
Next
End Sub
noch nicht so ganz…
bei der Zeile
z.Value = CDbl(CStr(z.Text))
meckert er: Typen unverträglich.
ist Spalte A komplett leer kommt kein Fehler.
Auch wenn ich Spalte A komplett leere, mecker er:
„Typen unverträglich“
(was ist „CDbl“?)
Sag ich nicht
Oder ist deine F1-Taste defekt?
Hat geklemmt, geht aber jetzt wieder 
CDbl-Funktion (Beispiel)
In diesem Beispiel wird die CDbl-Funktion zum Umwandeln eines Ausdrucks in den Typ Double verwendet.
Wie werd ich denn jetzt diesen Fehler los?
Gruß
Rolf
Hallo Rolf,
Auch wenn ich Spalte A komplett leere, mecker er:
„Typen unverträglich“
ich glaube jetzt brauchen wir eine Beispieltabelle wo all das auftritt.
Und schreibe möglichst viele vorkommen könntenen Zahlen Trennzeichen kominationen. Am bestenin Spalte B.
Spate A läßt du leer.
Und natürlich muß der Fehler auch auftreten.
Dann hochladen mit file-upload, s. FAQ:2606
Sag ich nicht
Oder ist deine F1-Taste defekt?
Hat geklemmt, geht aber jetzt wieder 
Oha, sicher ein vorweihnachtliches Wunder geschehen *lächel*
Gruß
Reinhard
Grüezi Rolf
Sub test()
Dim z As Range
For Each z In Range(„A2:A41“)
If Not z.Value = „“ Then
z.NumberFormat = „General“
z.Value = CDbl(CStr(z.Text))
End If
Next
End Sub
noch nicht so ganz…
bei der Zeile
z.Value = CDbl(CStr(z.Text))
meckert er: Typen unverträglich.
(was ist „CDbl“?)
Hast Du noch eine Idee?
Den Tipp mit F1 hat dir Reinhard ja schon gegeben.
Deine Beschreibung liess mich darauf schliessen, dass:
a)
Der Bereich komplett gefüllt ist
b)
Nur Zahlen und keine Texte darin vorkommen
Sorge für diese Vorgaben, dann klappt auch der Code.
Wenn das nicht möglich ist, dann schildere exakt, ausführlich und genau was in dem Bereich enthalten ist.
Mit freundlichen Grüssen
Thomas Ramel
Moin zusammen,
ich glaube jetzt brauchen wir eine Beispieltabelle wo all das
auftritt.
Ich hab das hier mal hochgeladen:
http://www.file-upload.net/download-3048000/Test_2.x…
Und schreibe möglichst viele vorkommen könntenen Zahlen
Trennzeichen kominationen.
Es zerschießt mir die markierte Spalte F
Wär schön, wenn Ihr noch eine Idee hättet.
Gruß
Rolf
http://www.file-upload.net/download-3048000/Test_2.x…
Und schreibe möglichst viele vorkommen könntenen Zahlen
Trennzeichen kominationen.
Es zerschießt mir die markierte Spalte F
Hallo Rolf,
je nachdem welchen der beiden nachfolgenden Codes du nimmst, hast du danach Texte oder Zahlen in den Zellen.
Format aller Zellen ist dann Standard, einige zahlen werden dann abe linksstehend als Text angesehen.
Was genau meinst du mit zerschießt? Punkt anstatt Komma kann ich nach den makros nicht erkennen.
In welchen Zellen in F soll das sein?
Schreib mal in eine freie Spalte rechts von BI die Werte aus F, wie sie nach deinem Wunsch her aussehen sollen nach einem Makro.
Gruß
Reinhard
Code in Modul1!!!
Option Explicit
'
Sub test2()
Dim z As Range
Range("F10:F202").NumberFormat = "General"
For Each z In Range("CA10:CA350")
If Not z.Value = "" Then z.Value = CDbl(CStr(z.Text))
Next
End Sub
'
Sub test()
Dim z As Range
Application.ScreenUpdating = False
Range("A1:BI350").NumberFormat = "General"
For Each z In Range("A1:BI350")
z.Value = z.Text
'z.Value = Val(z.Text)
'z.Value = CStr(z.Text)
Next
Application.ScreenUpdating = True
End Sub
Hallo Reinhard,
einzige Aufgabe des Makros soll es sein, die
führenden Hochkommata zu entfernen. Das klappt auch.
Zusätzlich macht er aber im Beispiel aus
Zelle F19
vor dem Makrolauf 13komma180
nach dem Makrolauf 13punkt180
Ich habe die Mappe hier
http://www.file-upload.net/download-3048579/Test_3.x…
nochmal hochgeladen NACH dem Makrolauf.
Die „vorher“ Spalte ist zum Vergleich als Hardcopy VOR dem
Makrolauf genommen.
Bei den rot umrahmten Zellen hat er ungefragt aus dem Komma
einen Punkt gemacht. So werden aus 13,18 kW 13.180 kW. Das ist übel.
Nochmal:
Das Makro soll nur die führenden Hochkommata entfernen, sonst nichts.
Gruß
Rolf
Hallo Rolf,
Zusätzlich macht er aber im Beispiel aus
Zelle F19
vor dem Makrolauf 13komma180
nach dem Makrolauf 13punkt180
*seufz*, ich sollte doch die Schriftgröße vergrößern.
http://www.file-upload.net/download-3048579/Test_3.x…
nochmal hochgeladen NACH dem Makrolauf.
Die „vorher“ Spalte ist zum Vergleich als Hardcopy VOR dem
Makrolauf genommen.
Okay, probiere halt den nachfolgenden Code.
Ist doch nur eine Frage der geduld bis mal ein Code klappt
)
Gruß
Reinhard
Public Sub test5()
' Idee: Rolf
' Codes: Thomas, Nepumuk
' Gesamtcodierung: Reinhard
Dim objCell As Range
On Error GoTo ende 'wenn Specialcells nix findet
Application.ScreenUpdating = False
For Each objCell In ActiveSheet.Range("A1:BI350").SpecialCells(xlCellTypeConstants)
If objCell.PrefixCharacter "" Then objCell.Value = CDbl(CStr(objCell.Text))
Next
Range("A1:BI350").NumberFormat = "General"
ende:
Application.ScreenUpdating = True
End Sub
Grüezi Rolf
…sagte ich doch, dass Du noch andere Werte in der Spalte hast als nur Zahlen und leere Zellen… 
einzige Aufgabe des Makros soll es sein, die
führenden Hochkommata zu entfernen. Das klappt auch.
Zusätzlich macht er aber im Beispiel aus
Zelle F19
vor dem Makrolauf 13komma180
nach dem Makrolauf 13punkt180
Bei den rot umrahmten Zellen hat er ungefragt aus dem Komma
einen Punkt gemacht. So werden aus 13,18 kW 13.180 kW. Das ist
übel.
Nochmal:
Das Makro soll nur die führenden Hochkommata entfernen, sonst
nichts.
Na, dann versuche es mal hiermit, zugeschnitten auf deine erste hochgeladene Mappe:
Sub test()
Dim z As Range
For Each z In Range("F9:F74")
If Not z.Value = "" And Not z.Value = "---" Then
With z.Offset(0, 3)
.NumberFormat = "General"
.Value = CDbl(CStr(z.Text))
End With
End If
Next
End Sub
Mit freundlichen Grüssen
Thomas Ramel
Moin Thomas,
Das Makro soll nur die führenden Hochkommata entfernen, sonst
nichts.
Na, dann versuche es mal hiermit, zugeschnitten auf deine
erste hochgeladene Mappe:
Sub test()
Dim z As Range
For Each z In Range(„F9:F74“)
If Not z.Value = „“ And Not z.Value = „—“ Then
With z.Offset(0, 3)
.NumberFormat = „General“
.Value = CDbl(CStr(z.Text))
End With
End If
Next
End Sub
Der Code schreibt mit den Inhalt von Spalte F
3 Spalten weiter oder eben dahin wohin ich ihn
mit " With z.Offset(0, …)" schicke.
Ich müsste also jede in Frage kommende Spalte einzeln abfragen.
Und viel wichtiger: Die Hochkommata in den übrigen Zellen
sind immer noch da, und genau die wollte ich eliminieren.
Gruß
Rolf
Moin Reinhard,
Okay, probiere halt den nachfolgenden Code.
Ist doch nur eine Frage der geduld bis mal ein Code klappt
-))
Gruß
Reinhard
Public Sub test5()
’ Idee: Rolf
’ Codes: Thomas, Nepumuk
’ Gesamtcodierung: Reinhard
Dim objCell As Range
On Error GoTo ende 'wenn Specialcells nix findet
Application.ScreenUpdating = False
For Each objCell In
ActiveSheet.Range(„A1:BI350“).SpecialCells(xlCellTypeConstants)
If objCell.PrefixCharacter „“ Then objCell.Value =
CDbl(CStr(objCell.Text))
Next
Range(„A1:BI350“).NumberFormat = „General“
ende:
Application.ScreenUpdating = True
End Sub
Ähm - Du hast das sicher getestet, aber bei mir hat’s absolut
keinen Effekt auf die Tabelle (mit der hochgeladenen und meinem
Original getestet). Die Hochkommata bleiben überall drin.
Sonst hat’s auch ein paar Sekunden gedauert, bis er fertig war.
Jetzt zuckt der Bildschirm nur kurz (Wäre ja schön, wenn’s so schnell ginge
. )
Mach ich was falsch?
Gruß
Rolf
Grüezi Rolf
Der Code schreibt mit den Inhalt von Spalte F
3 Spalten weiter oder eben dahin wohin ich ihn
mit " With z.Offset(0, …)" schicke.
Ich müsste also jede in Frage kommende Spalte einzeln
abfragen.
Und viel wichtiger: Die Hochkommata in den übrigen Zellen
sind immer noch da, und genau die wollte ich eliminieren.
…das Wichtigste hat Du leider vergessen zu erwähnen: passt es denn bei den eingefügten Werten mit den Daten?
Du musst nur einfach den Offset weglassen, dann passt das - soooooo schwer kann das IMO doch nicht sein:
Sub test()
Dim z As Range
For Each z In Range("F9:F74")
If Not z.Value = "" And Not z.Value = "---" Then
With z
.NumberFormat = "General"
.Value = CDbl(CStr(z.Text))
End With
End If
Next
End Sub
Mit freundlichen Grüssen
Thomas Ramel