Microsoft Excel

Herbers Excel/VBA-Archiv

Umwandeln eines Strings (Formel) in einen Wert

Betrifft: Umwandeln eines Strings (Formel) in einen Wert
von: Lutz
Geschrieben am: 15.04.2003 - 15:56:13

Hallo zusammen,

folgendes Problem kann ich seit einiger Zeit nicht lösen:
In einer Zelle (z.B A1) steht ein String, der eine Formel darstellt. Beispiel: 3,02*(7,0-1,9)
Diesen String möchte ich in einen Wert umwandeln.
Hier also 15,402

In Access löst das die Funktion eval(String), wenn statt des "," ein "." als Dezimaltrennzeichen verwendet wird.

Versucht habe ich u.a. soetwas wie (in Feld A2) =A1, was aber nur den String reproduziert. Auch Tricks mit maskiertem " haben bisher nicht geholfen.

Ein Pendant zu eval für Excel habe ich bisher nicht gefunden.

Zweck der ganzen Übung ist natürlich, den Formeltext weiter angezeigt zu lassen und trotzdem in einer anderen Spalte das Ergebnis der Berechnung anzuzeigen.

Weiß jemand wie ich das lösen könnte?

Viele Grüße
Lutz

  

Re: Umwandeln eines Strings (Formel) in einen Wert
von: Ramses
Geschrieben am: 15.04.2003 - 16:09:01

Hallo Lutz,

probier mal folgendes:
Range("A1") = "3,02*(7,0-1,9)"
Range("B1").Formula = "=3,02*(7,0-1,9)"

Mit "formula" weist du EXCEL an, eine Formel einzusetzen, dann rechnet EXCEL auch :-)

Gruss Rainer

  

Re: Umwandeln eines Strings (Formel) in einen Wert
von: ChrisL
Geschrieben am: 15.04.2003 - 16:14:00

Hallo Lutz

Versuchs mal hiermit...

Option Explicit

Sub FormelnErgebnis()
Dim Zelle As Object

For Each Zelle In Range("A1:A100")
If IsEmpty(Zelle) = False Then Cells(Zelle.Row, 2).Formula = "=" & Zelle.Value
Next
End Sub


Einträge in A1:A100, Ergebnis in B1:B100

Gruss
Chris

  

Re: Umwandeln eines Strings (Formel) in einen Wert
von: GerdZ
Geschrieben am: 15.04.2003 - 16:33:50

Hallo Lutz,

da gibt es mehrere Möglichkeiten:

1) wähle im Menü: Einfügen - Namen - Definieren
Bei "Namen in der Arbeitsmappe:" gibst Du
Formel
ein.
In "Bezieht sich auf:" schreibst Du:
=AUSWERTEN(Tabelle1!$A:$A)
Dann auf OK klicken.
In A1 steht 3,02*(7,0-1,9)
In B1 (oder irgend eine andere Zelle der Zeile 1) kommt die Formel: =Formel
als Ergebnis wird in B1 dann angezeigt: 15,402

2) Du erstellst Dir eine benutzerdefinierte Funktion:
Public Function TextEval(Text As String) As Double
TextEval = Application.Evaluate(Replace(Text, ",", "."))
End Function
In eine beliebige Zelle kommt dann die Formel: =TextEval(A1)

Gruß
Gerd




  

Re: Umwandeln eines Strings (Formel) in einen Wert
von: Lutz
Geschrieben am: 15.04.2003 - 16:41:28

Hallo Rainer (und natürlich alle anderen interessierten Leser),

das hilft ein kleines Stück weiter, löst mein Problem aber noch nicht.

Zunächstmal scheint das Problem wohl nur mit VBA lösbar zu sein. Falls es doch einen Weg gibt, dies direkt auf dem Excelsheet zu erreichen, wäre das noch besser.

Ich hab' also Range("A1")="3,02*(7,0-1,9)" ausprobiert und natürlich taucht in Feld A1 der Text 3,02*(7,0-1,9) auf.
Das zweite Beispiel wirft aber eine Fehlermeldung aus:
"Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler".

Die angegebene Formel ist natürlich nicht fix, sondern je Zeile wird von den Usern eine andere Formel eingetragen.

Wie könnte ich also folgendes Realisieren:
Range("B1").Formula= >>Stringtext aus Zelle A1<<, so dass in B1 dann der Wert steht, den die Formel aus Zelle A1 darstellt.
Range("B1").Formula= "=" & Range("A1") etwa funktioniert nicht.

Hier der Quelltext meiner kleinen Test-sub-Funktion:
Sub meier()
Dim Test As String
Range("B1") = "Meier"
Test = "=" & Range("A1")
Range("B2").Formula = Test
End Sub

Viele Grüße
Lutz


  

Re: Umwandeln eines Strings (Formel) in einen Wert
von: Ramses
Geschrieben am: 15.04.2003 - 16:45:42

Hallo Lutz,

dann würde ich sagen, dass deine EXCEL-Umgebung kein Komma als Dezimaltrennzeichen akzeptiert sondern den Punkt.
Ersetze mal in der Anweisung wie ich sie vorhin geschickt habe, dass Komma in der Formelanweisung gegen einen Punkt.

Gruss Rainer

  

Re: Umwandeln eines Strings (Formel) in einen Wert
von: Lutz
Geschrieben am: 15.04.2003 - 17:42:17

Supi,

herzlichen Dank an Rainer, Gerd und Chris für die kompetente und sehr hilfreiche Unterstützung. Jetzt funktionierts endlich.

@Rainer: Richtig, wenn statt "," ein "." im String steht, dann funktioniert Range("A2").Formula = "=" & Range("A1")

@Gerd: Zuerst hatte ich den Code unter 'Microsoft Excel Objekte/Diese Arbeitsmappe' bzw '.../Tabelle1' plaziert. Damit kam nur ein #Name? zurück. Aber nach dem ein eigenes Modul erstellt war, läuft nun auch die Function TextEval(String) und liefert das Ergebnis richtig zurück - insbesondere mit Umwandlung von "," in "."

Jetzt bin ich gespannt, ob sich das Verfahren auch auf einen PDA transferieren läßt. Ich vermute aber, das Pocket Excel kein VBA mag und das die Formeldefinition von Gerd ( ... = AUSWERTEN(Tabelle1!$A:$A) dem PDA ebenfalls fremd bleibt.

CU,
Lutz

 

Beiträge aus den Excel-Beispielen zum Thema "Umwandeln eines Strings (Formel) in einen Wert"