Kopiere dieses Makro mal in Dein Excel rein und führe es aus.
Das Ergebnis bekommst Du dann für die einfachere Erklärung in Message-Boxen.
Ich denke mal, das kannst Du leicht an Dein Problem anpassen.
********************************************************************
Public Sub Olaf()
Dim strText As String
Dim Start As Integer
Dim Mitte As Integer
Dim Ende As Integer
strText = "180:100:10:25"
Start = InStr(1, strText, ":")
Mitte = InStr(Start + 1, strText, ":")
Ende = InStr(Mitte + 1, strText, ":")
MsgBox "Vorne = " & Mid(strText, 1, Start - 1)
MsgBox "Teil1 = " & Mid(strText, Start + 1, Mitte - (Start + 1))
MsgBox "Teil2 = " & Mid(strText, Mitte + 1, Ende - (Mitte + 1))
MsgBox "Teil3 = " & Mid(strText, Ende + 1, Len(strText) - Ende)
End Sub
Office - Word, Excel und Co. 9.753 Themen, 41.598 Beiträge
Den Link zu diesem Thread habe ich mir gerade in die Firma weitergeschickt - schau ich mir morgen in Ruhe im "Original"-Excel inkl. Visual Basic Editor an.
THX!
Olaf
Ist ja nett, allerdings hat deine Routine einige Schönheitsfehler:
1. gehst du davon aus, dass ein solcher String immer max. vierteilig ist
2. gehst du davon aus, dass der Trenner immer der Doppelpunkt ist
3. ist sie programmiertechnisch zu aufwändig ;)
Meine Lösung:
Public Function ZahlenExtrahieren(text As String, trenner As String, position As Long) As Long
'nichtdimensiniertes Array fuer die Rueckgabe der Spit Funktion
Dim numbers() As String
'dummy für MsgBox
Dim a As Long
'auftrennen des Strings mittels Split
numbers() = Split(text, trenner)
'rückgabe der an der angegebenen position befindlichen Zahl im Strin
'falls Positionsangabe > anzahl Zahlen, Meldung
If position <= UBound(numbers) Then
ZahlenExtrahieren = numbers(position - 1)
Else
a = MsgBox("ungültige Positionsangabe", vbInformation)
End If
End Function
Aufrufbar als Funktion im Spreadsheet und, wenn in die Personl.xls kopiert, aus *jedem* Spreadsheet.
Syntax:
ZahlenExtrahieren(string, trenner, position-gewünschte-zahl)
Beispiel:
ZahlenExtrahieren("100:20:30:10";":";1) => 100
ZahlenExtrahieren("100:20:30:10";":";2) => 20
ZahlenExtrahieren("100:20:30:10";":";3) => 30
ZahlenExtrahieren("100:20:30:10";":";4) => 10
Genausogut können alle Werte als Zellbezüge übergeben werden.
Volker
Das kleine Makro hat NICHT NUR keinen Schönheitsfehler, sondern ist das ideale Werkzeug.
1. Die 4-stellige Zahl ist ja nur ein Beispiel und beliebig veränderbar.
2. Es ist nur dafür da, damit Olaf sieht, wie man sowas lösen könnte.
und nun das allerbeste
3. Es ist der ideale Trigger für Leute wie Dich, es besser zu machen oder zu verfeinern. Hat doch gut geklappt.
Gut gemacht
peterson
Nö. Eine Sub ist nunmal nicht als Zellfunktion geeignet. Genau das war aber die Anforderung ;)
Als Anschauungsmaterial nach dem Motto "sieh mqal hier, so *könnte* man das machen" geht sie so gerade noch durch ;)
1. Die 4-stellige Zahl ist ja nur ein Beispiel und beliebig veränderbar.
Ja. Aber du musst das jedesmal hartcodieren.
Und bekommst ein massives Problem mit der Rücklieferung der Werte.
2. Es ist nur dafür da, damit Olaf sieht, wie man sowas lösen könnte.
Akzeptiert.
Ich wollte deine Mühen auch nicht schmälern sondern nur direkt aufzeigen, was man besser machen kann ;))
Volker
Man kann alles besser machen.
Deswegen ist es ja da.
Das funktioniert absolut ober-knorke!
Jetzt gestatte mir absolutem VBn00b noch eine typische Anfängerfrage... wie ersetze ich "180:100:10:25" durch Zelle A1, oder noch besser durch: die Zelle, die gerade markiert ist? Irgendwas mit "Range" oder "Select(ion)"?
Jetzt schon definitiv ein lehrreiches Beispiel.
THX
Olaf
Hi Olaf,
schau dir meine Lösung an. Die wollte ich dir schion am MO zugemailt haben, da hatte ich bzw. der Mailserver meines Providers probleme mit GMX...
Meine Lösung hat folgende Vorteile:
1. der Zahlenstring kann beliebig lang sein
2. der Trenner ist beliebig
3. Es funktioniert sowohl mit Direktangabe als auch mit Zellbezügen
4. du kannst Direktangaben und Zellbezüge mischen
Volker
Hi Volker,
Da ich an meine Mails auf der Nickles-Adresse gerade nicht herankomme - wäre es machbar, die Lösung hier zu posten? Dann hätte die ganze Community etwas davon.
Die Beschreibung klingt auf jeden Fall sehr brauchbar.
CU
Olaf
Hi olaf
der VBA-code steht doch oben?!
direkt unte dem Beitrag von peterson
Volker
Meine Antwort kam nur 1 Minute nach deiner, deswegen hatte ich sie noch nicht auf dem Schirm :-)
Sieht auch gut aus und werde ich ebenfalls probieren, sobald ich wieder Excel unter den Fingern habe.
THX
Olaf
Dort mußt Du Deinen String übergeben.
Das macht man mit der direkten auslesen der Zelle.
= Cells(1,1)
Die Parameter sind Zeile und Spalte, in diesem Fall die Zell A1. Die Zelle muß aber als Text formatiert sein.
Die Ausgabe kannst Du auch in Zellen wieder unterbringen.
Wenn Du die Zelle nehmen willst, die gerade aktiviert ist, dann heißt das
= ActiveCell
=ActiveCell
- danke, das war's! Finde ich am besten, weil sehr flexibel, man muss sich dann nicht auf eine bestimmte Zelle festlegen. Dass die andere Alternative = Cells(1,1) anstelle von (A,1) oder (A1) lautet, hatte ich übrigens nicht gewusst. Aber ich kenne Visual Basic auch kaum.
THX
Olaf