Hallo,
ich habe eine generell Frage und Suche nach der besten / einfachsten Lösung -
Und zwar möchte ich Textfelder in Zahlenfelder umwandeln mit einer Formel.
Und zwar sollen alle
1) Zeichen
2) Sonderzeichen (z.B. $, &, usw.)
3) Leerzeichen
3) Code (160)
ausgefiltert werden.
Am Ende soll dann nur mehr eine Zahle mit Komma übrigbleiben.
Experementiere mit verschachtelten WECHSEL-Funktionen - das macht mich aber irgendwie nicht glücklich.
Gibt es hier eine einfachere Lösung?
Hallo Rapid
Wenn das mit einer Formel gemäss dem Vorschlag shift-del geht, ist das gut. Sonst wäre für ein solches Problem auch VBA Regexp geeignet. Das braucht dann allerdings etwas Übung um den Suchstring zu formulieren. Wenn ich Dich richtig verstehe ist in einem String an beliebiger Stelle nach [mehrstellige Zahl][,][mehrstellige Zahl] zu suchen.
Gruss
Ein UDF
in B1: =F_snb(A1)
Code:
Function F_snb(c00)
For j = 1 To Len(c00)
If Mid(c00, j, 1) Like "#" Then F_snb = F_snb & Mid(c00, j, 1)
Next
End Function
Hallo snb,
Zitat:Am Ende soll dann nur mehr eine Zahle mit Komma übrigbleiben.
Bei mir passierte bei einem Test folgendes
Arbeitsblatt mit dem Namen 'Tabelle1' |
| A | B |
1 | Test~125,20 | 12520 |
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg |
und eigentlich sollte da, wenn ich das Ausgangsposting richtig interpretiere, die Zahl 125,20 stehen.
Das war nur als Ansatz gemeint und als Aufforderung selbst die Code zu ergänzen.
Hallo
ich habe auch ein Makro geschrieben, es gehört in ein normales Modul und durchsucht eine beliebige Spalte.
Zum Testen nahm ich Spalte "A", hier kann der Frager jede beliebige andere Spalte angeben. Aber bitte
alle "A" aendern !!
Das Ergebnis wird in die Spalte geschrieben die im Makro angegeben ist. Frei waehlbar, zur Zeit "B"
Ich habe Zweifel das jeder Frager ein gutes Makro wie von snb selbst anpassen kann. Das Problem ist m.E. gerade die Komma Auswertung.
mfg Gast 123
Code:
'Eigenes Makro für beliebigen Bereich
Sub Zahlen_ausfiltern()
Dim Zahl As Double, AC As Range
Dim Zeichen As Variant, lz As Long
'LastZell suchen, hier Spalte "A"
lz = Cells(Rows.Count, "A").End(xlUp).Row
'Schleife füğr ganze Spalte bearbeiten (hier "A")
For Each AC In Range("A2:A" & lz)
Zahl = Empty: Zeichen = Empty
'Schleife zum String zerlegen (Zahl ausfiltern)
For j = 1 To Len(AC)
Zeichen = Mid(AC, j, 1) 'Zeichen zum audswerten
If IsNumeric(Zeichen) Then Zahl = Zahl & Zeichen
If Zeichen = "," And Len(Zahl) > 0 Then
If IsNumeric(Mid(AC, j + 2, 1)) Then
Zahl = Zahl & Mid(AC, j, 3): Exit For
ElseIf IsNumeric(Mid(AC, j + 1, 1)) Then
Zahl = Zahl & Mid(AC, j, 2): Exit For
End If
End If
Next
'Ergebnis in Spalte B anzeigen (selbst festlegen)
Cells(AC.Row, "B") = Zahl
Next AC
End Sub
Danke - das Makro hilft mir!
So kompliziert:
Code:
Function F_snb(c00)
For j = 1 To Len(c00)
If Mid(c00, j, 1) Like "#" Or Mid(c00, j, 1) = "," Then F_snb = F_snb & Mid(c00, j, 1)
Next
End Function
Hier noch eine UDF Variante mit Regex:
Code:
Function extractnumbers(ByVal Zelle As String)
Dim regex As Object
Set regex = CreateObject("vbscript.regexp")
With regex
.Pattern = "^(.*?)(\d+[,\.\s]*\d+)(.*?)$"
extractnumbers = .Replace(Zelle, "$2")
End With
End Function
VG
Steffen