Rechnen mit Texten

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Rechnen mit Texten
von: Wolfgang Schläfer
Geschrieben am: 08.09.2015 11:33:14

Rechnen mit Zahlen
Ziel ist es, aus einem Text mit eingegebenen Zahlen und Rechenoperatoren die Aufgabe zu
berechnen.
Beispiel - Wie viel Liter Blut pumpt das Herz an einem Tag:
(5,6 Liter kleiner Kreislauf zur Lunge + 5,6 l großer Kreislauf in den Körper) je Minute * 60
Minuten * 24Stunden
Lösung:
Hier Excel 2010, Entwicklungstools muss aktiviert sein
1. Schritt
Visual Basic - Modul1 - folgende Funktion eingeben:

Function Sauber(x As String) ' das kann auch ein anderer zulässiger Name sein
' testet den übergebenen String  auf die Zeichen "(", ")", "*", "/", "+", ",", "%", "^", "-"  _
und die
' Ziffern 0 bis 9
' alle nicht genannten Zeichen werden ausgefiltert, was bleibt ist die Rechenaufgabe in   _
_
der die
' oben genannten Zeichen verwendet werden.
' Achtung! Sehr wich6g: alle Klammern richtig setzen
Sauber = ""
For i = 1 To Len(x)
        If Mid(x, i, 1) = "(" Then Sauber = Sauber + Mid(x, i, 1)
        If Mid(x, i, 1) = ")" Then Sauber = Sauber + Mid(x, i, 1)
        If Mid(x, i, 1) = "*" Then Sauber = Sauber + Mid(x, i, 1)
        If Mid(x, i, 1) = "/" Then Sauber = Sauber + Mid(x, i, 1)
        If Mid(x, i, 1) = "+" Then Sauber = Sauber + Mid(x, i, 1)
        If Mid(x, i, 1) = "-" Then Sauber = Sauber + Mid(x, i, 1)
        If Mid(x, i, 1) = "%" Then Sauber = Sauber + Mid(x, i, 1)
        If Mid(x, i, 1) = "," Then Sauber = Sauber + Mid(x, i, 1)
        If Mid(x, i, 1) = "^" Then Sauber = Sauber + Mid(x, i, 1)
        If Mid(x, i, 1) >= "0" And Mid(x, i, 1) <= "9" Then Sauber = Sauber + Mid(x, i, 1)
Next
End Function

Userbild
2. Schritt
Ein Tabellenblatt vorbereiten was wo stehen soll, wo die Aufgabe und wo das Ergebnis
Die Spalte der Aufgabe als Text, die Spalte des Ergebnisses als Zahl formatieren.
3. Schritt
Rechtsklick Maus auf Zelle C2 - Namen definieren
bezieht sich auf: =Auswerten(Sauber(B2)) eingeben
Name: hier Ergebnis - OK
4. Schritt
In Zelle C2 eingeben =Ergebnis - den Namen aus Schritt 3
5. Schritt
Die Rechenaufgabe in Zelle B2 eintippen
(5,6 Liter kleiner Kreislauf zur Lunge + 5,6 l großer Kreislauf in den Körper) je Minute * 60 Minuten * 24Stunden
Die Funktion Sauber liefert folgenden String: (5,6+5,6)*60*24
In C2 ist das Ergebnis sichtbar, dann in den Spalten A, D und E den Rest ausfüllen
Durch Anfassen der rechten unteren Ecke kann der Inhalt der Zelle C2 beliebig nach unten
kopiert werden
Fertig und viel Spaß beim Rechnen

Bild

Betrifft: AW: Danke für das Einstellen
von: Werner
Geschrieben am: 08.09.2015 12:09:06
Hallo Wolfgang,
feine Sache, kann man sicher mal gebrauchen. Danke.
Gruß Werner

Bild

Betrifft: AW: Danke für das Einstellen
von: Wolfgang Schläfer
Geschrieben am: 08.09.2015 12:54:43
Danke, ein Bauleiter hat mich auf die Idee gebracht, Texte Zahlen und Rechnen
Gruß Wolf

Bild

Betrifft: nettes Geschenk an die Gemeinde
von: Michael
Geschrieben am: 08.09.2015 12:27:05
Hi Wolfgang,
vielen Dank für die Mühe, das sieht doch richtig brauchbar für didaktische Zwecke aus.
Ich konnte aber die Finger nicht vom Code lassen, denn i war nicht "sauber" deklariert:

Option Explicit
Public Function Sauber(x As String) As String
Dim i As Long
Const s = "()*/+-%,^0123456789"
For i = 1 To Len(x)
  If InStr(s, Mid(x, i, 1)) > 0 Then Sauber = Sauber + Mid(x, i, 1)
Next
End Function
Sub SaubererTest()
MsgBox Sauber("(5,6 Liter kleiner Kreislauf zur Lunge + 5,6 l " & _
"großer Kreislauf in den Körper) je Minute * 60 Minuten * 24Stunden")
End Sub
Nochmal vielen Dank und happy exceling,
Michael
P.S.: Da meldet sich doch gleich wieder die Stimme unseres Physiklehrers: "SchreibenS' die Einheiten immer mit hin, sonst wissenS' am Schluß nimmer, was rauskommt."

Bild

Betrifft: die Finger nicht vom Code lassen
von: Rudi Maintaire
Geschrieben am: 08.09.2015 12:38:46
Hallo Michael,
wenn schon, denn schon: Strings werden in VBA mit & verknüpft und nicht mit +.

Then Sauber = Sauber & Mid(x, i, 1)
Gruß
Rudi

Bild

Betrifft: AW: die Finger nicht vom Code lassen
von: Wolfgang Schläfer
Geschrieben am: 08.09.2015 12:59:29
Danke, so ist es noch besser... dazu gelernt
Der Physiklehrer wusste was er sagte
Gruß Wolf

Bild

Betrifft: erwischt!
von: Michael
Geschrieben am: 08.09.2015 13:00:32
Hi Rudi,
wieder einmal...
Vielen Dank für den freundlichen Hinweis,
schöne Grüße,
Michael

Bild

Betrifft: Das gilt nur in Xl generell, ...
von: Luc:-?
Geschrieben am: 08.09.2015 14:14:28
…Rudi,
VBA kennt da Vorgehensvarianten…! ;-)
Gruß, Luc :-?

Bild

Betrifft: Danke, Luc :-?,
von: Michael
Geschrieben am: 08.09.2015 16:42:24
ich hatte mich schnell bei MS vergewissert, und natürlich geht es auch mit +, aber es sich mit & bei Strings anzugewöhnen, erscheint mir durchaus sinnvoll - deshalb habe ich nicht gemeckert.
Ist halt wie bei den Physikern: "Was? Wieso ist Beschleunigung in MetermalsekundenQUADRAT?"
Wenn der olle Appel schon fällt, isses zu spät zum Nachdenken.
Schöne Grüße,
Michael

Bild

Betrifft: AW: Danke, Luc :-?,
von: Wolf
Geschrieben am: 09.09.2015 06:32:57
Danke, hab noch was vergessen: Die Zelle mit dem =Ergebnis kannst auch in andere Spalten kopieren, aber bitte die Ergebniszelle als Zahl und die Aufgabenzelle als Text formatieren. Die Anpassiung erfolgt von Excel selbst.
Gruß Wolf

Bild

Betrifft: Na, dann sieh mal ...
von: Luc:-?
Geschrieben am: 09.09.2015 23:45:35
hier ff (habe die Michael-Rudi-korrigierte Variante benutzt), Wolf!
Luc :-?

Bild

Betrifft: Nur zur Info: Rechnen mit Texten
von: Luc:-?
Geschrieben am: 09.09.2015 19:11:07
Ich mache das wie folgt, Wolfgang:

 BCDEFGHI
1(5,6 Liter kleiner Kreislauf + 5,6 l großer Kreislauf) je Minute *60 Minuten*24Stunden16 128 l=--MaskOn(T2Form(B1);"num")
216 128 l=Compute(WECHSELN(MaskOn(B1;"num";"+,(*)");",";"."))
316 128 l=TextBerechnung
4  TextBerechnung=AUSWERTEN(MaskOn(B1;"num";"+,(*)"))
Das Liter-Symbol in Spalte D resultiert aus benutzer­definiertem Format, die in Spalte E gezeigten Fmln sind mögliche Varianten, wobei die dritte aus der ganz unten als 4. dargestellten benannten Fml mit XLM-Fkt AUSWERTEN resultiert und unter Einsatz der UDF MaskOn* aus dem Archiv auch nachvollzogen wdn kann. Die beiden 1.Fmln benötigen dagg noch eine weitere, unver­öffent­lichte UDF, können aber direkt in ZellFmln verwendet wdn.
* Diese entspricht in der Anwendung hier also deiner UDF Sauber, ist aber wesentlich universeller, d.h., kann mehrere ähnlich gelagerte Aufgaben lösen.
Gruß, Luc :-?

Besser informiert mit …

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Rechnen mit Texten"