Supportnet / Forum / Tabellenkalkulation
Wie per Makro Hochkomma entfernen
Frage
Hi,
teilweise erscheinen mir Imports aus anderer Anwendung (Notes) wie folgt:
'456
'46546
'798977
Ich brauche sie aber in den Zellen ohne dem Hochkomma '
Also
456
46546
798977
OK, hier ein Ansatz:
Sub HochkommaWech()
Dim c As Range
On Error Resume Next
For Each c In Selection
.........
.........
Next c
End Sub
Das Script soll also alle Hochkommas der ausgewählten Zellen entfernen.
Wie kann ich das realisieren?
Logic
Antwort 1 von gaga
habe mich auch schön öfters darüber geärgert. heute wende ich folgendes vorgehen an (aus ms excel xp hilfe)
geht für 'nicht immer wiederkehrende konvertierung' am schnellsten. für immer gleichbleibende datenwandlungen (irgendwelche reports) bist Du aber ev. mit dem makro schneller (-> funktion mid... verwenden)
- irgendwo in eine leere zelle die zahl 1 eingeben.
- diese zahl kopieren (Ctrl + C)
- nun die zellen mit diesen blödsinnig verkrümmten text-zahlen markieren.
- menü-punkt bearbeiten/inhalte einfügen -> multiplikation wählen
-> adakadabra...
geht für 'nicht immer wiederkehrende konvertierung' am schnellsten. für immer gleichbleibende datenwandlungen (irgendwelche reports) bist Du aber ev. mit dem makro schneller (-> funktion mid... verwenden)
Antwort 2 von logic
@gaga: danke, der Tipp war mir auch bekannt.
Nun suche ich aber einen Buttonklick :-)
Für manch andere Imports klappt auch ein:
SendKeys "{F2}", True
SendKeys "{ENTER}", True
Aber hier leider nicht.
Logic
Nun suche ich aber einen Buttonklick :-)
Für manch andere Imports klappt auch ein:
SendKeys "{F2}", True
SendKeys "{ENTER}", True
Aber hier leider nicht.
Logic
Antwort 3 von gaga
... gehe ich recht in der annahme, dass Du die fraglichen zellen markieren willst, auf den knopf drückst und voila?
hier etwas code:
-----------------------------------
Sub gaga()
dim objCell as Object
For Each objCell In Selection
objCell.Value = Val(objCell)
Next
End Sub
-----------------------------------
... hey, habe mich vorhin mit der funktion mid völlig vertan. das ' wird ja nur deshalb gezeigt, weil excel mitteilen will, dass es sich hier um eine als text formatierte zahl handelt. das ' ist also gar nicht vorhanden und kann also mit mid nicht weggezaubert werden. also val um aus einem text eine zahl zu machen.
hier etwas code:
-----------------------------------
Sub gaga()
dim objCell as Object
For Each objCell In Selection
objCell.Value = Val(objCell)
Next
End Sub
-----------------------------------
... hey, habe mich vorhin mit der funktion mid völlig vertan. das ' wird ja nur deshalb gezeigt, weil excel mitteilen will, dass es sich hier um eine als text formatierte zahl handelt. das ' ist also gar nicht vorhanden und kann also mit mid nicht weggezaubert werden. also val um aus einem text eine zahl zu machen.
Antwort 4 von logic
@Gaga,
danke für das Script, klappt aber so leider nicht :-(
Beispielsweise Datumsfeld. (sorry habe oben nur Zahlen als Bsp. angegeben).
Bei Zahlen klappt es allerdings wunderbar....
Logic
danke für das Script, klappt aber so leider nicht :-(
Beispielsweise Datumsfeld. (sorry habe oben nur Zahlen als Bsp. angegeben).
Bei Zahlen klappt es allerdings wunderbar....
Logic
Antwort 5 von gaga
... und was kommt als nächstes beispiel... ;-))
also musst Du erst die feldwerte untersuchen. vorausgesetzt, die datumsfelder haben ein 'verständliches' format solltest Du durch auswechseln der einen zeile durch folgende zwei zum ziel kommen:
' zeichen ' entfernen
objCell.Value = CStr(objCell)
' wenn inhalt in datum verwandelt werden kann ...
If IsDate(objCell) Then objCell = CDate(objCell)
also musst Du erst die feldwerte untersuchen. vorausgesetzt, die datumsfelder haben ein 'verständliches' format solltest Du durch auswechseln der einen zeile durch folgende zwei zum ziel kommen:
' zeichen ' entfernen
objCell.Value = CStr(objCell)
' wenn inhalt in datum verwandelt werden kann ...
If IsDate(objCell) Then objCell = CDate(objCell)
Antwort 6 von logic
Gaga, und nochmal danke!
Nice to have wäre halt ein Script was folgendes macht:
nimm objCell.Value in ein String
if Wert 1 in String = Hochkomma then
entferne Hochkomma
endif
next
Problem evtl. ist in VBScript, auf ein Hochkomma zuzugreifen, weil Sonderzeichen?
Logic
Zitat:
... und was kommt als nächstes beispiel... ;-))
... und was kommt als nächstes beispiel... ;-))
Nice to have wäre halt ein Script was folgendes macht:
nimm objCell.Value in ein String
if Wert 1 in String = Hochkomma then
entferne Hochkomma
endif
next
Problem evtl. ist in VBScript, auf ein Hochkomma zuzugreifen, weil Sonderzeichen?
Logic
Antwort 7 von Mikel
Wenn du in deiner Tabelle keine Hochzeichen hast die du noch benötigst, könnte man das auch mit der Ersetzen-Funktion machen.
Z.B.:
Sub Hochzeichen_entfernen()
Cells.Replace What:="'", Replacement:=""
End Sub
Mikel
Z.B.:
Sub Hochzeichen_entfernen()
Cells.Replace What:="'", Replacement:=""
End Sub
Mikel
Antwort 8 von Martina
Hallo,
kannst es auch hiermit mal versuchen:
Gruß Martina
kannst es auch hiermit mal versuchen:
Sub Makro()
Dim Wert
Wert = Selection
Selection = Right(Wert, Len(Wert))
End Sub
Gruß Martina
Antwort 9 von gaga
allgemein:
wie schon gesagt, dieses hochkomma wovon logic spricht gibt es eigentlich gar nicht. excel stellt dies nur dar, um zu zeigen, dass der inhalt der zelle als text formatiert ist.
deshalb funktioniert mikels vorschlag unter keinen umständen.
martinas vorschlag funktioniert, man könnte aber genau so gut left oder mid oder nur selection=wert verwenden.
excel muss nur irgendwie eine neue eingabe erhalten in der zelle und entscheidet dann selbst, ob es dieses nun nummerisch darstellen möchte.
anders mit dem datum, dieses muss mit cdate verwandelt werden.
hiermit sollte es also gehen:
(alle zellen markieren, dann script
laufen lassen)
_---------------------------------_
Sub gaga()
dim objCell as Object
For Each objCell In Selection
objCell.Value = objCell.value
If IsDate(objCell) Then objCell = CDate(objCell)
Next
End Sub
_---------------------------------_
geht dies?
wie schon gesagt, dieses hochkomma wovon logic spricht gibt es eigentlich gar nicht. excel stellt dies nur dar, um zu zeigen, dass der inhalt der zelle als text formatiert ist.
deshalb funktioniert mikels vorschlag unter keinen umständen.
martinas vorschlag funktioniert, man könnte aber genau so gut left oder mid oder nur selection=wert verwenden.
excel muss nur irgendwie eine neue eingabe erhalten in der zelle und entscheidet dann selbst, ob es dieses nun nummerisch darstellen möchte.
anders mit dem datum, dieses muss mit cdate verwandelt werden.
hiermit sollte es also gehen:
(alle zellen markieren, dann script
laufen lassen)
_---------------------------------_
Sub gaga()
dim objCell as Object
For Each objCell In Selection
objCell.Value = objCell.value
If IsDate(objCell) Then objCell = CDate(objCell)
Next
End Sub
_---------------------------------_
geht dies?
Antwort 10 von coros
Hi an alle,
ich hätte da folgenden Code anzubieten:
Ist im moment auf 100 Zellen begrenzt, kann aber geändert werden.
Ich hoffe, ich konnte Dir weiterhelfen,
coros
Und nicht vergessen, hier noch einmal zu posten, ob Dich die Hilfe weitergebracht oder sogar
Dein Problem gelöst hat.
ich hätte da folgenden Code anzubieten:
Private Sub CommandButton1_Click()
Dim ERSETZ As String
For i = 1 To 100
ActiveCell.FormulaR1C1 = ActiveCell.Text
ActiveCell.Offset(1, 0).Select
Next i
End Sub
Ist im moment auf 100 Zellen begrenzt, kann aber geändert werden.
Ich hoffe, ich konnte Dir weiterhelfen,
coros
Und nicht vergessen, hier noch einmal zu posten, ob Dich die Hilfe weitergebracht oder sogar
Dein Problem gelöst hat.
Antwort 11 von want2cu
Hallo zusammen,
hier gibt es ja schon prima Lösungen. Ich hätte noch eine Alternative, kann das aber leider nicht in VBA-Form anbieten.
Wenn man nur eine Spalte markiert und dann die OPtion "DATEN-TEXT IN SPALTEN-ENDE" wählt, verschwindet das Hochkomma ebenfalls.
So lassen sich übrigens auch andere Textwerte oder Datumswerte in ein numerisches Format umwandeln.
CU
want2cu
hier gibt es ja schon prima Lösungen. Ich hätte noch eine Alternative, kann das aber leider nicht in VBA-Form anbieten.
Wenn man nur eine Spalte markiert und dann die OPtion "DATEN-TEXT IN SPALTEN-ENDE" wählt, verschwindet das Hochkomma ebenfalls.
So lassen sich übrigens auch andere Textwerte oder Datumswerte in ein numerisches Format umwandeln.
CU
want2cu
Antwort 12 von xxxxxxxxx
hi alle wie schon bei einem anderen prob
das selbe makro,es entfernt jede art von sonderzeichen und text und macht aus einem punkt ein komma
Sub Makro1()
Range("a1").Select
adress$ = ActiveWindow.RangeSelection.Address
adress1 = Len(adress$)
For mo = 1 To adress1
If Mid$(adress, mo, 1) = "$" Then
llp = llp + 1
Else
If llp = 1 Then
spalte$ = spalte$ + Mid$(adress, mo, 1)
End If
If llp = 2 Then
zeile$ = zeile$ + Mid$(adress, mo, 1)
zeile1 = Val(zeile$)
End If
End If
Next mo
anfangspalte$ = spalte$
anfangzeile$ = zeile$
anfang01 = Val(anfangzeile$)
Dim zahl$(100)
Set LastCell = ActiveSheet.Cells.SpecialCells(xlLastCell)
alta = LastCell.Row
A = LastCell.Row
Do While Application.CountA(Rows(A)) = 0 And A <> 1
A = A - 1
Loop
alta = A
altb = LastCell.Column
b = LastCell.Column
Do While Application.CountA(Columns(b)) = 0 And b <> 1
b = b - 1
Loop
altb = b
lzeile = alta
lspalte = altb
For t% = Asc(anfangspalte$) To Asc(anfangspalte$) + lspalte - 1
For t1% = anfang01 To lzeile
laenge% = Len(Range(Chr$(t%) & t1%))
tt = 1
For t2% = 1 To laenge%
If Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(48) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(49) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(45) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(46) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(47) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(48) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(49) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(50) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(51) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(52) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(53) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(54) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(55) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(56) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(57) Then
zahl$(tt) = Mid$(Range(Chr$(t%) & t1%), t2%, 1)
tt = tt + 1
End If
Next t2%
Range(Chr$(t%) & t1%) = ""
For z = 1 To 100
If zahl$(z) <> "" And zahl$(z) <> "-" And zahl$(z) <> "." And zahl$(z) <> "," Then
Range(Chr$(t%) & t1%) = Str$(Range(Chr$(t%) & t1%)) + zahl$(z)
End If
Next z
Range(Chr$(t%) & t1%).Select
For z = 1 To 100
zahl$(z) = ""
Next z
Next t1%
Next t%
End Sub
das selbe makro,es entfernt jede art von sonderzeichen und text und macht aus einem punkt ein komma
Sub Makro1()
Range("a1").Select
adress$ = ActiveWindow.RangeSelection.Address
adress1 = Len(adress$)
For mo = 1 To adress1
If Mid$(adress, mo, 1) = "$" Then
llp = llp + 1
Else
If llp = 1 Then
spalte$ = spalte$ + Mid$(adress, mo, 1)
End If
If llp = 2 Then
zeile$ = zeile$ + Mid$(adress, mo, 1)
zeile1 = Val(zeile$)
End If
End If
Next mo
anfangspalte$ = spalte$
anfangzeile$ = zeile$
anfang01 = Val(anfangzeile$)
Dim zahl$(100)
Set LastCell = ActiveSheet.Cells.SpecialCells(xlLastCell)
alta = LastCell.Row
A = LastCell.Row
Do While Application.CountA(Rows(A)) = 0 And A <> 1
A = A - 1
Loop
alta = A
altb = LastCell.Column
b = LastCell.Column
Do While Application.CountA(Columns(b)) = 0 And b <> 1
b = b - 1
Loop
altb = b
lzeile = alta
lspalte = altb
For t% = Asc(anfangspalte$) To Asc(anfangspalte$) + lspalte - 1
For t1% = anfang01 To lzeile
laenge% = Len(Range(Chr$(t%) & t1%))
tt = 1
For t2% = 1 To laenge%
If Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(48) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(49) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(45) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(46) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(47) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(48) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(49) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(50) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(51) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(52) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(53) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(54) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(55) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(56) Or Mid$(Range(Chr$(t%) & t1%), t2%, 1) = Chr$(57) Then
zahl$(tt) = Mid$(Range(Chr$(t%) & t1%), t2%, 1)
tt = tt + 1
End If
Next t2%
Range(Chr$(t%) & t1%) = ""
For z = 1 To 100
If zahl$(z) <> "" And zahl$(z) <> "-" And zahl$(z) <> "." And zahl$(z) <> "," Then
Range(Chr$(t%) & t1%) = Str$(Range(Chr$(t%) & t1%)) + zahl$(z)
End If
Next z
Range(Chr$(t%) & t1%).Select
For z = 1 To 100
zahl$(z) = ""
Next z
Next t1%
Next t%
End Sub
Antwort 13 von nighty
hi alle
falls es doch noch jemanden interessiert
in dieser zeile ist der startpunkt bzw. zelle zu waehlen,falls ueberschrift vorhanden .Range("a1").Select somit es dann um eins erhoeht werden muss,eben so Range("a2").Select z.b.
gruss nighty
falls es doch noch jemanden interessiert
in dieser zeile ist der startpunkt bzw. zelle zu waehlen,falls ueberschrift vorhanden .Range("a1").Select somit es dann um eins erhoeht werden muss,eben so Range("a2").Select z.b.
gruss nighty
Antwort 14 von nighty
hi alle
noch ein paar tips von einem DAU :)
sollte man mal bei importierten dateien falsch dargestellte zeichen oder auch steuerzeichen haben,sind diese zu ermitteln welcher asci code es ist und somit leicht mit chr$(ascicode)in eine wieder holungschleife einzubinden ist,dabei spielt es wohl keine grosse rolle ob geloescht oder ausgetauscht werden soll.
gruss nighty
noch ein paar tips von einem DAU :)
sollte man mal bei importierten dateien falsch dargestellte zeichen oder auch steuerzeichen haben,sind diese zu ermitteln welcher asci code es ist und somit leicht mit chr$(ascicode)in eine wieder holungschleife einzubinden ist,dabei spielt es wohl keine grosse rolle ob geloescht oder ausgetauscht werden soll.
gruss nighty