Discussion:
Zahlen extrahieren und löschen
(zu alt für eine Antwort)
Mark
2007-07-31 09:27:36 UTC
Permalink
Hallo Zusammen,

vielleicht könnt Ihr mir helfen.

Ich möchte aus jeder Zelle (Text und Zahlen) einer Spalte eine
unbekannte 7stellige Zahl extrahieren und diese anschließend aus der
bisherigen Zeichenkette löschen.

Müsste doch eigentlich mit Hilfe der Excel Formeln möglich sein oder?

Beispiel (z.B. diese Zahl 8284400):

103.63 3.40 AGLIS 32 8284400 70.23 EHX


Vielen Dank schon mal ....

Gruß
Mark
Claus Busch
2007-07-31 10:11:31 UTC
Permalink
Hallo Mark,
Post by Mark
Ich möchte aus jeder Zelle (Text und Zahlen) einer Spalte eine
unbekannte 7stellige Zahl extrahieren und diese anschließend aus der
bisherigen Zeichenkette löschen.
Müsste doch eigentlich mit Hilfe der Excel Formeln möglich sein oder?
103.63 3.40 AGLIS 32 8284400 70.23 EHX
wenn dein String immer den gleichen Aufbau hat, probiere mal folgende
Formeln (unter der Annahme, dass dein String in Spalte A steht):
Extrahieren in B1: =TEIL(A1;FINDEN("#";WECHSELN(A1;" ";"#";4))+1;7)
Löschen in C1: =WECHSELN(A1;B1&" ";"")


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Alexander Wolff
2007-07-31 10:22:38 UTC
Permalink
Post by Claus Busch
Post by Mark
Ich möchte aus jeder Zelle (Text und Zahlen) einer Spalte eine
unbekannte 7stellige Zahl extrahieren und diese anschließend aus der
bisherigen Zeichenkette löschen.
103.63 3.40 AGLIS 32 8284400 70.23 EHX
Extrahieren in B1: =TEIL(A1;FINDEN("#";WECHSELN(A1;" ";"#";4))+1;7)
Löschen in C1: =WECHSELN(A1;B1&" ";"")
Guter Ansatz. Es spricht viel dafür, dass die 7stellige Zahl immer das 5te
Feld bildet. Das Extrahieren und Löschen kann man so auch in einem Zuge
vornehmen, wenn die 7st. Zahl selbst nicht interessiert ("B1" durch erste
Formel ersetzen).
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Eberhard Funke
2007-07-31 20:00:43 UTC
Permalink
Am Tue, 31 Jul 2007 12:11:31 +0200 schrieb Claus Busch:

Hallo,
Post by Claus Busch
wenn dein String immer den gleichen Aufbau hat, probiere mal folgende
Extrahieren in B1: =TEIL(A1;FINDEN("#";WECHSELN(A1;" ";"#";4))+1;7)
Daten nach Spalte B kopieren und markieren.
Menü Bearbeiten --> Ersetzen --> Suchen nach: "* * * * "
(ohne die "", die nur verdeutlichen sollen, dass hinter dem letzen * noch
ein Leerzeichen steht)
--> "Ersetzen durch" leer lassen und "Alle ersetzen" wählen.
Dann das Gleiche nochmals mit " * *".
Post by Claus Busch
Löschen in C1: =WECHSELN(A1;B1&" ";"")
unter der Voraussetzung, dass an 5. Stelle immer eine SIEBENstellige Zahl
steht. Sonst (?):
C1: =WENN(LÄNGE(B1)=7;WECHSELN(A1;B1&" ";"");A1)

Wenn die Strings nicht nur gleichen, sondern *identischen* Aufbau haben,
dann tut's auch B1: =LINKS(A1;21)&RECHTS(A1;9)
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Bernd P
2007-07-31 11:00:02 UTC
Permalink
Hallo Mark,

Wenn Du auch VBA Makros akzeptierst und Deine Kalkulation nicht von
der Anzahl der Leerzeichen und dem Nicht-Vorhandensein von "#" Zeichen
vor Deiner 7-stelligen Zahl abhängen soll:

Schreibe in B1:
=regexpreplace(A1,"^.*(\d{7}).*$","$1")
(dies ergibt die 7-stellige Zahl)

Schreibe in C1:
=regexpreplace(A1,"^(.*)\d{7}(.*)$","$1$2")
(dies ist der Text ohne die Zahl)

Das Makro (ALT und F11 drücken, dann neues Modul einfügen und
Makrotext hineinkopieren):
Option Explicit

'
' Ersetzen in einem String mit Regular Expressions via vbscript.regexp
' Parameter:
' SourceString Der String in dem gesucht werden soll
' Pattern Das zu suchenende Pattern
' ReplaceString Der zu ersetzende String, SubMatches sind als
' $i zu notieren, mit i=1,2,...
' IgnoreCase Flag, Groß- / Kleinschreibung ignorieren
' GlobalReplace Flag, ALLE bzw. NUR den 1. ten Match ersetzen
' MultiLine Flag ob ^ und $ in jeder Zeile matchen
'
' Rückgabewert:
' der SourceString, ggf. mit Ersetzung(en)
'
Function RegExpReplace(ByVal SourceString As String, _
ByVal Pattern As String, ByVal ReplaceString As String, _
Optional ByVal IgnoreCase As Boolean = False, _
Optional ByVal GlobalReplace As Boolean = False, _
Optional ByVal MultiLine As Boolean = False) As String

Dim objRE As Object

Set objRE = CreateObject("vbscript.regexp")
objRE.Pattern = Pattern
objRE.IgnoreCase = IgnoreCase
objRE.Global = GlobalReplace
objRE.MultiLine = MultiLine

RegExpReplace = objRE.Replace(SourceString, ReplaceString)
Set objRE = Nothing
End Function

Dies ist nicht meine Erfindung (hat bereits Bernd Strohhaecker
vorgeschlagen).

Viele Grüße,
Bernd
Alexander Wolff
2007-07-31 11:18:46 UTC
Permalink
CreateObject("vbscript.regexp"): Ab welcher Windows-Version geht das?

Schöne Möglichkeit, die demnach wohl kein Add-In benötigt und somit auch
eher portabel ist.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Bernd P
2007-07-31 12:10:01 UTC
Permalink
Hallo Alexander,

hier ist mehr Info zu finden:
http://www.regular-expressions.info/dotnet.html

HTH,
Bernd
Dr. Eckehard Pfeifer
2007-07-31 12:08:01 UTC
Permalink
Hallo, Alexander, soweit ich es zurück verfolgen kann, ist Internet
Explorer 5.5 etwas, was die vbscript.dll, die man braucht, mitbringt
(RegExp 5.5). Vorher gabs auch schon was (1.0).
--
MfG EP
Entwicklung - Beratung - Training (www.dr-e-pfeifer.net)
XL-Funktionsverzeichnis (ISBN: 3860636898)
MS Office 2003 - Das Entwicklerbuch (ISBN 3-86063-688-X)
Lesen Sie weiter auf narkive:
Loading...