Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
384to388
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
384to388
384to388
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

letzter versuch für code

letzter versuch für code
22.02.2004 15:46:31
Conrad
hallo user,
noch ein letzter versuch bezüglich auslesen einer formel
nachfolgender code als grundlage vorhanden, möchte halt nur noch die zahlen, statt der zellbezeichnungen drinne haben


Function Rechenweg(Bereich As Range) As String
Dim str As String
If Bereich.Count > 1 Then Bereich = Bereich(1)
Rechenweg = Bereich.FormulaLocal
End Function

     Code eingefügt mit Syntaxhighlighter 2.5


bei dem code klappt es auch mit der darstellung von operanden wie klammern und. z.B. a1/10
vielleicht erbarmt sich einer meiner????
cunradus

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: letzter versuch für code
22.02.2004 15:58:57
Ramses
Hallo
ich versteh nicht was du willst.
Diese Funktion gibt dir die Formel die in einer benannten Zelle steht als String zurück.
Was meinst du nun mit
"...möchte halt nur noch die zahlen, statt der zellbezeichnungen drinne haben..."
Welche Zahlen ?
Anstelle welcher Zellbezeichnungen ?
Gruss Rainer
AW: letzter versuch für code
22.02.2004 16:10:08
Conrad
hallo ramses
problemstellung
A B C
1| 2 3 4
berechnungsformel z.B. =(a1+b1)*c1/10
nunmehr möchte ich zur nachvollziehbarkeit folgendes rausbekommen: =(2+3)*4/10 =
dies kann ich zwar mit der textfunktion erreichen, da ich jedoch häufig ellenlange formeln habe, wollte ich mir gerne ein wenig die arbeit erleichtern.
weiter unten im forum (21.02.2004 13:49:30 ) ist ein etwas umfangreicherer code von andre.
hier versagt der code aber bei zusatzoperanden wie klammern und halt wie oben c1/10,
außerdem bekomm ich das ergebnis vor dem gleichheitszeichen nicht weg (brauch ich an der stelle aber nicht)
häng den code mal hinten ran
grüsse conrad


Function Rechenweg2(Bereich As Range) As String
'von Andre Schau / 19.02.2004
Dim RechenZeichen, RechenWeg
Dim RechenZeichenStelle As Integer
  If Bereich.Count > 1 Then Bereich = Bereich(1)
  RechenWeg = Bereich.Address(0, 0) & " " & Bereich.FormulaLocal
  RechenZeichen = Array("=", "+", "-", "*", "/", "^")
  RechenZeichenStelle = Len(RechenWeg)
  Do While RechenWeg <> ""
    For i = 0 To UBound(RechenZeichen)
      If InStr(RechenWeg, RechenZeichen(i)) < RechenZeichenStelle And _
        InStr(RechenWeg, RechenZeichen(i)) <> 0 Then _
        RechenZeichenStelle = InStr(RechenWeg, RechenZeichen(i))
    Next
    If RechenZeichenStelle = Len(RechenWeg) Then
      Rechenweg2 = Rechenweg2 & Range(RechenWeg)
      RechenWeg = ""
    Else
      Rechenweg2 = Rechenweg2 & Range(Left(RechenWeg, RechenZeichenStelle - 1)) & _
                Mid(RechenWeg, RechenZeichenStelle, 1)
      RechenWeg = Right(RechenWeg, Len(RechenWeg) - RechenZeichenStelle)
    End If
    RechenZeichenStelle = Len(RechenWeg)
  Loop
End Function

     Code eingefügt mit Syntaxhighlighter 2.5

Anzeige
NOCH OFFEN: letzter versuch für code
22.02.2004 16:20:34
Ramses
Hallo
Das hat aber doch mit der vorhin gezeigten Funktion und Frage überhaupt nichts zu tun ? :-(
Ich sehe da von meiner Seite keine Lösungsmöglichkeit, da der Operand nicht sauber zugeordnet werden kann.
C1/10 mag noch gehen, wenn dann aber darin steht, 12/4 ?,... das ist Teil einer Berechnung und es kann kein Zellbezug gefunden werden.
Mit Zeichenvergleich ist es hier auch nicht getan, weil es können doppelte Buchstaben "AA1" geben, oder auch Zeilennummern > 1000 usw. geben.
Sorry,.. da sehe ich keine, mit vertretbarem Aufwand, zu realisierende Lösung
Gruss Rainer
Anzeige
AW: NOCH OFFEN: letzter versuch für code
22.02.2004 16:26:40
conrad
ich dank dir für diese beurteilung - kann ich ja nunmehr weiterhin mit =text() arbeiten - aaarrrrgggh
conne
AW: letzter versuch für code
22.02.2004 17:01:43
Alex K.
Hallo Conrad,
versuche es mal damit:

Function Rechenweg(Bereich As Range) As String
Dim formula As String
Dim isText  As Boolean
Dim stPos   As Integer
Dim endPos  As Integer
Dim i       As Integer
Dim actChr  As String
Dim adrLen  As Integer
Dim adr     As String
If Bereich.Count > 1 Then Bereich = Bereich(1)
formula = Bereich.FormulaLocal
For stPos = 1 To Len(formula)
actChr = Mid(formula, stPos, 1)
If actChr = """" Then
If isText Then
isText = False
Else
isText = True
End If
End If
If actChr >= "A" And actChr <= "Z" And Not isText Then
If Mid(formula, stPos + 1, 1) >= "A" And Mid(formula, stPos + 1, 1) <= "Z" Then
adrLen = 2
Else
adrLen = 1
End If
actChr = Mid(formula, stPos + adrLen - 1, 1)
For i = stPos + adrLen To Len(formula)
If Mid(formula, i, 1) >= "0" And Mid(formula, i, 1) <= "9" Then
adrLen = adrLen + 1
Else
Exit For
End If
Next i
adr = Mid(formula, stPos, adrLen)
Rechenweg = Rechenweg & ActiveSheet.Range(adr)
stPos = stPos + adrLen - 1
Else
Rechenweg = Rechenweg & actChr
End If
Next stPos
End Function

Bitte beachte, das Makro geht nur für Formeln,
1) welche keinen Bereich in der Form "A1:B100" haben
2) die keinen Namen für Bereiche haben
3) die keinen Bezug auf andere Tabellen bzw. Dateien in der Form Tabell1!A1 nehmen
Musst nun halt mal testen, ob es für deine Formeln genügt.
Anzeige
Cool :-) Haut hin. o.T.
22.02.2004 17:25:42
Ramses
...
AW: letzter versuch für code
22.02.2004 18:32:41
Reinhard
Hi Conradus,
habs auch mal probiert
Gruß
Reinhard

Function Weg(Zelle As Range)
Formel = Zelle.FormulaLocal
Weg = ""
While Len(Formel) > 0
Select Case Left(Formel, 1)
Case "="
Case "(", ")", "+", "-", "*", "/", "^", "0" To "9"
Weg = Weg & Mid(Formel, 1, 1)
Case "A" To "Z"
Länge = 1
If Mid(Formel, 1, 1) >= "A" And Mid(Formel, 1, 1) <= "I" _
And Mid(Formel, 2, 1) >= "A" And Mid(Formel, 2, 1) <= "V" Then
Länge = 2
End If
While Mid(Formel, Länge + 1, 1) >= "0" And Mid(Formel, Länge + 1, 1) <= "9"
Länge = Länge + 1
Wend
Weg = Weg & Range(Mid(Formel, 1, Länge)).Value
If Range(Mid(Formel, 1, Länge)).Value = "" Then Weg = Weg & "0"
Formel = Mid(Formel, Länge)
Case Else
Weg = "Fehler in Formel"
End Select
Formel = Mid(Formel, 2)
Wend
End Function

Anzeige
Klasse Jungs!!
22.02.2004 19:57:13
Conrad
Dank allen dreien!
Funktioniert einwandfrei. Genau so hatte ich mir das vorgestellt.
Forum wie immer ganz grosse klasse!!
Conrad
Merci im Namen des Forums *g o.w.T.
22.02.2004 21:22:29
Reinhard
.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige