Discussion:
Zahlen von Text trennen...
(zu alt für eine Antwort)
Rainer Ostmann
2003-11-13 14:47:27 UTC
Permalink
Hallo erstmal,

ich habe in Spalte "C" folgende Angaben:

1) 5 Pal.+4 Kar.
2) 15 Pal.+27 Kar.
3) 11 Kar.
4) 1 Pal.
......

Wie kriege ich es hin, dass aus den Angaben Zahlen
werden, mit denen ich rechnen kann?

Die Anzahl der Kartons braucht nicht berücksichtigt zu
werden, die Anzahl der Paletten soll um 1 erhöht wer-
den.

Aus "A" wird also z.B. 6, aus "B" wird 16, aus "C" wird 1
und aus "D" wird 2.

Geht das per Makro? Wenn ja, wie müsste es aussehen?

Gruß,
Rainer
Hajo
2003-11-13 14:51:35 UTC
Permalink
Hallo Rainer

siehe Dir doch mal diesen Beitrag an

http://forum.myphorum.de/read.php?f=3040&i=31570&t=31521

Gruß Hajo
Post by Rainer Ostmann
Hallo erstmal,
1) 5 Pal.+4 Kar.
2) 15 Pal.+27 Kar.
3) 11 Kar.
4) 1 Pal.
......
Wie kriege ich es hin, dass aus den Angaben Zahlen
werden, mit denen ich rechnen kann?
Die Anzahl der Kartons braucht nicht berücksichtigt zu
werden, die Anzahl der Paletten soll um 1 erhöht wer-
den.
Aus "A" wird also z.B. 6, aus "B" wird 16, aus "C" wird 1
und aus "D" wird 2.
Geht das per Makro? Wenn ja, wie müsste es aussehen?
Gruß,
Rainer
Rainer Ostmann
2003-11-13 15:09:11 UTC
Permalink
Post by Hajo
siehe Dir doch mal diesen Beitrag an
http://forum.myphorum.de/read.php?f=3040&i=31570&t=31521
Danke, aber das hilft mir jetzt gar nicht weiter, weil ich erstens kein
Excelexperte bin (obwohl das einige behaupten), und zweitens sich
das Beispiel gar nicht auf meine Tabelle übertragen lässt.

Ich will ja nicht die Summe zweier Zahlen in einer Zelle bilden, sondern
nur die erste Zahl vom Text trennen und ohne Text als Zahl anzeigen. Das
mit dem "um 1 erhöhen" könnte ich auch anschliessend mit einer Hilfsspalte
machen.

Gruß,
Rainer
Herbert Taferner
2003-11-13 16:09:15 UTC
Permalink
Hallo Rainer,

versuche es mal so,

in ein Modul
'-------------------------
Public Function ZahlausText(rngTxt As Range) As Long
Dim S As Integer
Application.Volatile
If rngTxt = "" Then
ZahlausText = 0
Exit Function
End If
For S = 1 To Len(rngTxt)
If Not IsNumeric(Mid(rngTxt, S, 1)) Then
ZahlausText = CDbl(Left(rngTxt.Value, S - 1))
Exit For
End If
Next
Exit Function
ErrEnd:
Err.Clear
ZahlausText = 0
End Function
'-------------------

aufrufen mit z. B.
=ZahlausText(A1)

mfg Herbert
Post by Rainer Ostmann
Post by Hajo
siehe Dir doch mal diesen Beitrag an
http://forum.myphorum.de/read.php?f=3040&i=31570&t=31521
Danke, aber das hilft mir jetzt gar nicht weiter, weil ich erstens kein
Excelexperte bin (obwohl das einige behaupten), und zweitens sich
das Beispiel gar nicht auf meine Tabelle übertragen lässt.
Ich will ja nicht die Summe zweier Zahlen in einer Zelle bilden, sondern
nur die erste Zahl vom Text trennen und ohne Text als Zahl anzeigen. Das
mit dem "um 1 erhöhen" könnte ich auch anschliessend mit einer Hilfsspalte
machen.
Gruß,
Rainer
Melanie Breden
2003-11-13 16:14:20 UTC
Permalink
Hallo Rainer,
Post by Rainer Ostmann
1) 5 Pal.+4 Kar.
2) 15 Pal.+27 Kar.
3) 11 Kar.
4) 1 Pal.
......
Wie kriege ich es hin, dass aus den Angaben Zahlen
werden, mit denen ich rechnen kann?
Die Anzahl der Kartons braucht nicht berücksichtigt zu
werden, die Anzahl der Paletten soll um 1 erhöht wer-
den.
Aus "A" wird also z.B. 6, aus "B" wird 16, aus "C" wird 1
und aus "D" wird 2.
Geht das per Makro? Wenn ja, wie müsste es aussehen?
da könnte dir eine benutzerdefinierte Funktion helfen:
Die Funktion ist ab Excel2000 einsetzbar.

Function Paletten(strText As String) As Integer
Dim varSplit As Variant

Paletten = 1
If InStr(strText, "Pal.") > 0 Then
varSplit = Split(strText, "Pal.")
Paletten = Val(varSplit(0)) + 1
End If
End Function

Rufe sie entweder als Formel im tabellenblatt auf:
=Paletten(C1)

oder über eine Prozedur:
Sub test()
MsgBox Paletten("15 Pal.+27 Kar.")
End Sub
--
Mit freundlichen Grüßen

Melanie Breden
Microsoft MVP für Excel
Rainer Ostmann
2003-11-13 22:07:17 UTC
Permalink
Post by Melanie Breden
Die Funktion ist ab Excel2000 einsetzbar.
Function Paletten(strText As String) As Integer
Dim varSplit As Variant
Paletten = 1
If InStr(strText, "Pal.") > 0 Then
varSplit = Split(strText, "Pal.")
Paletten = Val(varSplit(0)) + 1
End If
End Function
=Paletten(C1)
Sub test()
MsgBox Paletten("15 Pal.+27 Kar.")
End Sub
Tut mir leid, aber das ist zu hoch für einen Otto, äh Excel-Normal-
Anwender. Ich weis nicht, wo ich das einfügen könnte. Kannst Du
mir auf die Sprünge helfen?

Gruß,
Rainer
Melanie Breden
2003-11-13 22:30:23 UTC
Permalink
Hallo Rainer,
Post by Rainer Ostmann
Post by Melanie Breden
Die Funktion ist ab Excel2000 einsetzbar.
[snip Code]
Post by Rainer Ostmann
Tut mir leid, aber das ist zu hoch für einen Otto, äh Excel-Normal-
Anwender. Ich weis nicht, wo ich das einfügen könnte. Kannst Du
mir auf die Sprünge helfen?
das ist gar nicht so schwer Otto äh Rainer ;-)

Klicke mit der echten Maustaste auf einen Tabellenregister deiner Arbeitsmappe
und wähle 'Code anzeigen'. Füge über 'Einfügen | Modul' ein neues Modul ein.
In das rechte Fenster fügst du die Function ein:

Function Paletten(strText As String) As Integer
Dim varSplit As Variant

Paletten = 1
If InStr(strText, "Pal.") > 0 Then
varSplit = Split(strText, "Pal.")
Paletten = Val(varSplit(0)) + 1
End If
End Function

Schließe den Editor wieder.

In Excel kannst du nun die Funktion 'Paletten' als Formel in einer Zelle aufrufen.
Wenn in C1 der Text '5 Pal.+4 Kar.' steht, dann ´schreibe z.B. in D1 die Formel:
=Paletten(C1) liefert 6 in D1

Kommst du jetzt weiter?
--
Mit freundlichen Grüßen

Melanie Breden
Microsoft MVP für Excel
Rainer Ostmann
2003-11-14 17:24:21 UTC
Permalink
Post by Melanie Breden
Kommst du jetzt weiter?
Danke, jetzt klappt es. Es geht doch nichts über eine ausführliche
Beschreibung...

Vielen Dank nochmal,

Rainer
Melanie Breden
2003-11-15 08:54:53 UTC
Permalink
Hallo Rainer,
Post by Rainer Ostmann
Danke, jetzt klappt es. Es geht doch nichts über eine ausführliche
Beschreibung...
Vielen Dank nochmal,
da du nach einem Makro gefragt hast, bin ich davon ausgegangen, dass
du bereits Kenntnisse in VBA hast.

Aber wie du siehst, war es gar nicht so schwer und beim nächsten Makro
geht es fast wie von selbst :-)
--
Mit freundlichen Grüßen

Melanie Breden
Microsoft MVP für Excel
Rainer Ostmann
2003-11-14 18:20:27 UTC
Permalink
Wie gesagt, klappt es jetzt. Was ist eigentlich der Unterschied zum
Makro? Wenn ich "Extras-Makros" aufrufe, finde ich es nicht. Es
funzt zwar, aber ich weis nicht warum :-(

Gruß,
Rainer
Melanie Breden
2003-11-15 08:55:01 UTC
Permalink
Hallo Rainer,
Post by Rainer Ostmann
Wie gesagt, klappt es jetzt. Was ist eigentlich der Unterschied zum
Makro? Wenn ich "Extras-Makros" aufrufe, finde ich es nicht. Es
funzt zwar, aber ich weis nicht warum :-(
eine Sub-Prozedur bezeichnet man als Makro, welche auch im Makro-Dialog
aufgeführt werden.

Du verwendest eine 'Function'. Sie wird entweder durch einen Formelaufruf
in einer Zelle oder eine andere Prozedur aufgerufen.
Da sie nicht direkt gestartet werden können, werden Funktionen auch nicht im Makro-Dialog angezeigt.

Mache folgenden Test:
Wechsel mit 'Alt+F11' in den VBA-Editor, klicke doppelt auf das Modul im
Projekt-Explorer der die Funktion enthält.
Stelle den Cursor in die Aufrufzeile 'Function Paletten (...)' und drücke die Taste 'F9'.
Dadurch setzt du einen Haltepunkt.

Wechsel zum Tabellenblatt und klicke doppelt auf eine Zelle mit der Formel und schließe
mit Enter ab. Dadurch wird die Formel in der Zelle neu berechnet und
der VBA-Code wird an der Stelle des Haltepunktes gestoppt.
Du kannst nun schrittweise mit F8 die einzelnen Zeilen des Codes durchlaufen.
Halte zwischendurch den Maus-Cursor über einzelne Wörter, dann zeigt die Quickinfo
den jeweiligen Wert an.
Mit 'F5' wird die ganze Prozedur weitergeführt.

Füge folgende Prozedur ebenfalls in das Modul der Funktion ein:

Sub AufrufPaletten()
MsgBox Paletten("15 Pal.+27 Kar.")
End Sub

Stelle den Cusor irgendwo in den Code und drücke 'F8', um die Prozedur schrittweise auszuführen.
Im Makro-Dialog wird diese Prozedur auch angezeigt und kann dort aufgerufen werden.
--
Mit freundlichen Grüßen

Melanie Breden
Microsoft MVP für Excel
Rainer Ostmann
2003-11-15 15:51:58 UTC
Permalink
Post by Melanie Breden
Wechsel mit 'Alt+F11' in den VBA-Editor, klicke doppelt auf das Modul im
Projekt-Explorer der die Funktion enthält.
Stelle den Cursor in die Aufrufzeile 'Function Paletten (...)' und drücke die Taste 'F9'.
Dadurch setzt du einen Haltepunkt.
Wechsel zum Tabellenblatt und klicke doppelt auf eine Zelle mit der Formel und schließe
mit Enter ab. Dadurch wird die Formel in der Zelle neu berechnet und
der VBA-Code wird an der Stelle des Haltepunktes gestoppt.
Du kannst nun schrittweise mit F8 die einzelnen Zeilen des Codes durchlaufen.
Halte zwischendurch den Maus-Cursor über einzelne Wörter, dann zeigt die Quickinfo
den jeweiligen Wert an.
Mit 'F5' wird die ganze Prozedur weitergeführt.
Bis hier hin verstanden...
Post by Melanie Breden
Sub AufrufPaletten()
MsgBox Paletten("15 Pal.+27 Kar.")
End Sub
Da gehen die Probleme schon wieder los. Ich habe es versucht, der
VBA Editor war plötzlich 100? mal offen, und ich weis gar nicht, was
mir diese Prozedur bringen soll. Aber ich glaube, die brauche ich auch
nicht. Irgendwann konnte ich den "Debugger" schliessen und ohne zu
speichern meine vorige Tabelle wieder herstellen.

Gruß,
Rainer

Loading...