Office - Word, Excel und Co. 9.753 Themen, 41.598 Beiträge

Nun nochmal Olafs Zeichenkettenproblem.

peterson / 12 Antworten / Baumansicht Nickles

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

bei Antwort benachrichtigen
Olaf19 peterson „Nun nochmal Olafs Zeichenkettenproblem.“
Optionen

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

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
neanderix peterson „Nun nochmal Olafs Zeichenkettenproblem.“
Optionen

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

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
peterson neanderix „Ist ja nett, allerdings hat deine Routine einige Schönheitsfehler: 1. gehst du...“
Optionen

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



bei Antwort benachrichtigen
neanderix peterson „Das kleine Makro hat NICHT NUR keinen Schönheitsfehler, sondern ist das ideale...“
Optionen
Das kleine Makro hat NICHT NUR keinen Schönheitsfehler, sondern ist das ideale Werkzeug.

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
Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
peterson neanderix „ Nö. Eine Sub ist nunmal nicht als Zellfunktion geeignet. Genau das war aber...“
Optionen

Man kann alles besser machen.

Deswegen ist es ja da.

bei Antwort benachrichtigen
Olaf19 peterson „Nun nochmal Olafs Zeichenkettenproblem.“
Optionen

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

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
neanderix Olaf19 „Das funktioniert absolut ober-knorke! Jetzt gestatte mir absolutem VBn00b noch...“
Optionen

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

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
Olaf19 neanderix „Hi Olaf, schau dir meine Lösung an. Die wollte ich dir schion am MO zugemailt...“
Optionen

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

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
neanderix Olaf19 „Hi Volker, Da ich an meine Mails auf der Nickles-Adresse gerade nicht herankomme...“
Optionen

Hi olaf

der VBA-code steht doch oben?!
direkt unte dem Beitrag von peterson

Volker

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
Olaf19 neanderix „Hi olaf der VBA-code steht doch oben?! direkt unte dem Beitrag von peterson Volker“
Optionen

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

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
peterson Olaf19 „Das funktioniert absolut ober-knorke! Jetzt gestatte mir absolutem VBn00b noch...“
Optionen

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

bei Antwort benachrichtigen
Olaf19 peterson „Dort mußt Du Deinen String übergeben. Das macht man mit der direkten auslesen...“
Optionen

=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

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen