Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zahl im Text herausfinden vba

Zahl im Text herausfinden vba
30.12.2008 16:07:13
Harald
Hallo im Excelforum,
ich möchte aus einer Zelle in der Text und Zahlen stehen, eine sechstellige Zahl finden deren erste 3 Zahlen immer gleich sind zb 208xxx und das mit vba. In Spalte vier steht der Text und in Spalte 9 sollte dann nur noch die Zahl stehen.
mfg
Harald

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahl im Text herausfinden vba
30.12.2008 16:29:01
Nepumuk
Hallo Harald,
ein Beispiel zu selberbasteln:
Public Sub Beispiel()
    Dim objRegEx As Object, objMatch As Object, objMatchCollection As Object
    Dim strText As String
    strText = "ab987654cde208123fgh1234567ijk"
    Set objRegEx = CreateObject("VBScript.RegExp")
    With objRegEx
        .MultiLine = True
        .Global = True
        .IgnoreCase = True
        .Pattern = "208\d{3}"
        Set objMatchCollection = .Execute(strText)
    End With
    For Each objMatch In objMatchCollection
        MsgBox "Wert: " & objMatch.Value & " Position: " & objMatch.FirstIndex & " Länge: " & objMatch.Length
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: Zahl im Text herausfinden vba
30.12.2008 17:33:00
Harald
Hallo Nepumuk,
vielen Dank für die schnelle Lösung und vielen vielen Dank an alle Antworten auf meine Frage
Vielen Dank an alle
mfg
Harald
AW: Zahl im Text herausfinden vba
30.12.2008 17:44:00
robert
hi,
wäre interessant, wie du dein problem gelöst hast,
können wir es erfahren-danke
denn ,ohne nepumuks lösung zu bemängeln,- aber was passiert nach der msgbox-meldung?
gruß
robert
AW: Zahl im Text herausfinden vba
30.12.2008 19:05:00
Harald
Hallo Robert hier meine Lösung
'#######################################################################################
' Prozedure : RechNR_auslesen
' Autor : Harald
' Datum : 30.12.2008 18:58
' Aufgabe : Das Auslesen der Rechnungsnummer aus dem Verwendungszweck eines Kontoauszug
'#######################################################################################
' alles was ich kommentiert habe verstehe ich auch den Rest nicht aber es funzt Dank Nepumuk

Sub RechNR_auslesen()
Dim objRegEx As Object, objMatch As Object, objMatchCollection As Object
Dim strText As String
cRow = [MAX(IF(C1:C65000="",0,ROW(C1:C65000)))]  'letzte Zeile finden auch bei ausgeblendeter  _
Zeilen
Nr = Array("205", "206", "207", "208", "209", "210", "211")
For b = 0 To 6
For a = 2 To cRow
'In Spalte 4 steht der Verwendungszweck hier kann alles mögliche stehen Zahlen Text
'wichtig für mich ist aber nur die 6stellige Rechnungsnummer und die fängt an zb 205  _
oder 206 usw.
strText = Cells(a, 4)
Set objRegEx = CreateObject("VBScript.RegExp")
With objRegEx
.MultiLine = True
.Global = True
.IgnoreCase = True
.Pattern = Nr(b) & "\d{3}"
Set objMatchCollection = .Execute(strText)
End With
For Each objMatch In objMatchCollection
'Hier wird die Rechnungsnummer in Spalte 9 eingetragen
Cells(a, 9) = objMatch.Value
'            MsgBox "Wert: " & objMatch.Value & " Position: " & objMatch.FirstIndex & " Länge: " _
& objMatch.Length
Next
Next a
Next b
End Sub


mfg
Harald

Anzeige
Danke für Meldung-owT
30.12.2008 19:09:00
robert
@Harald-keine Antwort?
30.12.2008 19:05:00
robert
AW: Zahl im Text herausfinden vba
30.12.2008 16:54:00
Tino
Hallo,
hier noch eine Möglichkeit
Dim strText As String
'hier steht der kompl. Text 
strText = Range("A1")
'hier kommt die Zahl rein 
Range("I1") = Mid(Right(strText, Len(strText) - InStrRev(strText, "208") + 1), 1, 6)
'hier kommt der Text rein ohne Zahl 
Range("D1") = Replace(strText, Range("I1"), "")


Gruß Tino

Anzeige
AW: Zahl im Text herausfinden vba
30.12.2008 17:02:24
Tino
Hallo,
oder auch so rum
Dim strText As String
strText = Range("A1")
Range("I1") = Mid(strText, InStr(strText, 208), 6)
Range("D1") = Replace(strText, Range("i1"), "")


Gruß Tino

Anzeige
AW: Zahl im Text herausfinden vba
30.12.2008 17:07:25
robert
Hi Tino,
ich verfolge dich ;-))
wenn nur 208 gebraucht wird, statt 6 - 3 ?
Range("I1") = Mid(strText, InStr(strText, 208), 6)
gruß
robert
AW: Zahl im Text herausfinden vba
30.12.2008 17:14:00
Tino
Hallo Robert,
ja so ist es, aber dies würde keinen Sinn machen, Du kannst gleich 208 schreiben. ;-)
Range("I1") = Mid(strText, InStr(strText, 208), 3)
dann kannst Du gleich so schreiben
Range("I1") = 208
Gruß Tino
AW: Zahl im Text herausfinden vba
30.12.2008 17:27:00
robert
hi tino,
er will doch aus einer 6 stelligen string den text und 208 getrennt haben-oder?
dann muss es 3 heissen - glaube ich, bzw.habe es getestet
gruß
robert
AW: Zahl im Text herausfinden vba
30.12.2008 17:41:00
Tino
Hallo,
ich habe die anders verstanden,
z. Bsp. aus abcd208152efgh
möchte er 208152 in einer Zelle und in einer anderen abcdefgh
Gruß Tino
Anzeige
JaJa-ein problem-mehrere Meinungen-oT
30.12.2008 17:46:00
robert
TINO hat Recht--------owT
30.12.2008 19:27:14
robert
Man, ihr immer mit euren Insellösungen... ;-)
31.12.2008 06:49:00
Luc:-?
Ist ja für Anfänger ganz hilfreich, aber über udFktt denkt kaum mal einer nach!
Da bräuchte man in die Zielzelle nur eine Formel einzutragen und schon wäre das gelöst; bspw so...
Quellzelle A1: abcd208152EFGH
Zielzelle B1: =--MaskOn(A1;"num") ⇒ 208152 [durch -- als Zahl]
oder andersrum...
Zielzelle C1: =MaskOn(A1;"num";1) → abcd EFGH
Zielzelle D1: =MaskOn(A1;"kb") → abcd
Zielzelle E1: =MaskOn(A1;"gb") → EFGH
usw.
Eine ältere Version von MaskOn steht im Forumsarchiv!
Guten Rutsch!
Luc :-?
Am Rande bemerkt: Xl12 hat so seine Tücken für VBA-Nutzer - bei Einstellung auf manuelle Berechnung fktn weder Evaluate noch WorksheetFunctions mit Feldverarbeitung (inkl Min/Max) in udFktt. Auch Application.Volatile führt dann zu Fehlerabbruch.
Na dann Prost!
Anzeige
Unser Gschaftlhuber
31.12.2008 09:09:59
Nepumuk
Hallo Luc,
dann mach doch mal je zwei volatile UDF's pro Zeile für 2.000 Zeilen in einer Tabelle. 4.000 Berechnungen bei jeder Eingabe egal in welcher Tabelle der Mappe und in jeder Mappe die ich in der selben Application geöffnet habe. Ganz toll wenn ich nach jeder Eingabe 2 bis 3 Sekunden warten muss, bis der Cursor in der nächsten Zelle ankommt. Wenn ich deine 4 Formeln in 2.000 Zeilen benutze, sind es über 5 Sekunden die ich warten muss. Spitze!!!
Meine Meinung: Finger weg von UDF's wenn sie in mehr als 10 Zeilen benötigt werden. Die bremsen alles ungemein und oft laufen andere Makros auf unerklärliche Fehler durch diese Berechnungen wenn sie einen Fehlerwert ausgeben, da solche Fehler in die andere Routine verschleppt werden.
Gruß
Nepumuk
Anzeige
...Nicht, wenn man sie ordentlich pgmt,...
01.01.2009 05:31:43
Luc:-?
...Nepumuk... ;-)
Allerdings sind bei derartigen Datenmengen Subroutinenlösungen durchaus überlegenswert!
Außerdem beruht die MS-Philosophie von Xl i.W. auf Formeln (auch mit Fktt). Leider fallen deren Möglichkeiten ggüber ergänzender bzw alternativer Software mitunter deutlich geringer aus, weshalb ich übrigens einst auf die Idee verfiel, "fehlende" Fktt nachzubauen.
Aber auch, wenn Xl12 noch mehr Möglichkeiten zum DB-Nachbau bietet, sehe ich die Hauptaufgabe von Xl nicht in der Massen-DV. Dafür gibt's ja z.B. SQL, womit Daten aus DBn vorverdichtet wdn können.
Ansonsten wird hier wie in anderen Foren gern das Rad nicht nur zum 100., nein, auch zum 1000.Mal neu erfunden. Im Grunde doch recht langweilig... ;-)
Und was soll ich mit Gschaftlhuber anfangen...? Weder du noch ich sind m.W. Süddeutsche! Kann man dich nicht in Berlin finden?! Da wäre ich fast gleich um die Ecke...
Auch bezeichnet dieses Wort wohl einen besonders eifrigen Geschäftemacher... Siehst du mich so?
Ich möchte eigentlich nur das allgemeine Augenmerk auf ein meist weitgehend vernachlässigtes interessantes VBA-Anwendungsfeld lenken, das ebenfalls enormes kreatives Anwendungspotenzial besitzt [, besonders, wenn man die fkttypischen Einschränkungen zu umgehen sucht... ;-) ].
Letztendlich kann auf diese Weise etwas herauskommen, was dem ähnelt, das excelformeln praktiziert, ohne ebensolche Bandwurmformeln zu verursachen. Damit kann sich der Nutzer dann seine individuelle FmlLösung selbst zusammenbauen wie er es von Standardexcel gewohnt sein sollte...
Na dann Prosit Neujahr!
...auch, wenn es für die hierin zu erwartenden Probleme wohl keine Fml- bzw VBA-Lösung geben mag (dafür dann den Link)... ;->
Gruß Luc :-?
Besser informiert sein!
Anzeige
Aha! Meine teilweise...
05.01.2009 01:55:09
Luc:-?
...bayrischen Vorfahren sind da dann wohl weniger relevant, Nepumuk... ;-)
Ein Dito für 2009!
Gruß Luc :-?
AW: Man, ihr immer mit euren Insellösungen... ;-)
31.12.2008 09:48:00
Tino
Hallo Luc,
ich muss Nepumuk recht geben,
zudem sehe ich in diesem Fall nur den Sinn in einer UDF, wenn sich z. Bsp. in Zelle A1 ständig die Daten ändern und eine Aktualisierung ständig erforderlich ist.
Bei 2000 und mehr Daten würde sich auch die Verarbeitung in einer Matrix bzw. Area anbieten.
Wünsche einen guten Rutsch.
Gruß Tino
Anzeige
...dito gehabt zu haben! Vgl oben! Gruß owT
01.01.2009 05:33:00
Luc:-?
:-?

350 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige