[VBA/Excel] Summenfunktion

Von: , Frage gestellt am Fr, 18. Aug 2000

Hi Leute,

fuer Excel braeuchte ich eine fortgeschrittene Summenfunktion,
die man in manch gutem Taschenrechner schon fertig findet.

Die Aufrufsyntax sollte sein:

AdvSum(Ausdruck, Laufvariablenname, Untergrenze, Obergrenze)

um dann z.B. AdvSum("2*i", "ì", 1, 5) = 30 zu erhalten.

Dazu muesste die Funktion intern 2*1 + 2*2 + 2*3 + 2*4 + 2*5
berechen. Ich bekomme es als Neuling in VBA aber nicht hin,
das der Laufvariablenname "i" als Zahlvariable in "2*i"
eingefuegt wird.

Wer weiss Rat und kann mir helfen?

Mit besten Gruessen,

-Andreas.

6 Antworten zu dieser Frage

  1. Antwort von nach 9 Stunden hilfreich
    Re: [VBA/Excel] Summenfunktion

    Hi Leute,

    AdvSum(Ausdruck, Laufvariablenname, Untergrenze, Obergrenze)

    um dann z.B. AdvSum("2*i", "ì", 1, 5) = 30 zu erhalten.

    Wer weiss Rat und kann mir helfen?
    Wie komplex darf denn der Ausdruck sein ? (Schachtelungen etc.)
    Am einfachsten ist es, den Ausdruck zunaechst in eine ander Darstellungsart zu bringen: Nennt die polnische Notation. Dabei wird erst der Operator ( bei dir das "*") und dann die Operanden angegeben. Dein Beispiel würde dann z.B. so ausseh'n:
    "*(2,i)"
    Diese Operanden kann man auch wunderbar schateln. Ein Ausdruck wie z.B. "4*8+10" sähe in der polnischen Notation so aus:
    "+( *(4,8) ,10)"
    So kann man ganz einfach die Zeichenkette von vorne nach hinten durcharbeiten und kann dann das "i" jeweils durch den aktuelle Laufindex ersetzen.

    Gruss Jens

    • Antwort von nach 12 Stunden hilfreich
      Re: [VBA] Summenfunktion mit poln. Notation

      Hi nochmal ! Am einfachsten ist es, den Ausdruck zunaechst in eine ander
      Darstellungsart zu bringen: Nennt die polnische Notation.
      Dabei wird erst der Operator ( bei dir das "*") und dann die
      Operanden angegeben. Dein Beispiel würde dann z.B. so
      ausseh'n:
      "*(2,i)"
      Diese Operanden kann man auch wunderbar schateln. Ein Ausdruck
      wie z.B. "4*8+10" sähe in der polnischen Notation so aus:
      "+( *(4,8) ,10)"
      So kann man ganz einfach die Zeichenkette von vorne nach
      hinten durcharbeiten und kann dann das "i" jeweils durch den
      aktuelle Laufindex ersetzen.
      Wer will kann den Source fuer diese Variante von mir haben ... Mail reicht

      Gruss Jens

      • Antwort von nach 22 Stunden hilfreich
        Re^2: [VBA] Summenfunktion mit poln. Notation

        Hi Jens, Am einfachsten ist es, den Ausdruck zunaechst in eine ander
        Darstellungsart zu bringen: Nennt die polnische Notation.
        Dabei wird erst der Operator ( bei dir das "*") und dann die
        Operanden angegeben. Dein Beispiel würde dann z.B. so
        ausseh'n:
        "*(2,i)"
        Diese Operanden kann man auch wunderbar schateln. Ein Ausdruck
        wie z.B. "4*8+10" sähe in der polnischen Notation so aus:
        "+( *(4,8) ,10)"
        So kann man ganz einfach die Zeichenkette von vorne nach
        hinten durcharbeiten und kann dann das "i" jeweils durch den
        aktuelle Laufindex ersetzen.
        Hmm, daran hatte ich noch nicht gedacht. Die Polnische Notation ... ich fuehl mich so in meinen Informatik-Grundkurs zurueckversetzt ;-)

        Allerdings ist mir das ein bisschen umstaendlich, da ich ziemlich lange Ausdruecke zu summieren habe, die so schon unhandlich genug sind und ich sie nicht nochmal umstricken will.

        Gibt es nicht eine Moeglichkeit den Parameter Laufvariable "i" in "2*i" durch Zahlen zu ersetzen. In Perl wuerde ich i als symbolische Variable, also als Variable fuer einen Variablennamen ansetzen und den Ausdruck "eval"-uieren.

        Geht das irgendwie mit VB (vielleicht ueber Typdeklaration
        als Variant oder mit Stringersetzungen), wenn doch selbst moderne Taschenrechner solche Summen ohne Polnische Notation
        berechnen koennen?

        Schon mal danke fuer die Bemuehung,

        -Andreas.

  2. Antwort von nach 9 Stunden hilfreich
    Re: [VBA/Excel] Summenfunktion

    Hallo AdvSum(Ausdruck, Laufvariablenname, Untergrenze, Obergrenze)

    um dann z.B. AdvSum("2*i", "ì", 1, 5) = 30 zu erhalten.

    Ich bin mir nicht sicher, ob ich Deine Vorstellungen ganz durchblicke, aber warum soll die Laufvariable Teil des Aufrufs sein? Normalerweise ist die Laufvariable eine interne Variable der Funktion und von aussen interessiert es mich nicht, ob ich die i, j oder otto nenne.

    Mit dem Aufruf AdvSum(Multiplikator, Minimum, Maximum) solltest Du doch dann keine Probleme haben. Das i definierst Du innerhalb der Funktion und benutzt es in einer For-Schleife.

    Gruß
    Thomas

    • Antwort von nach 23 Stunden hilfreich
      Re^2: [VBA/Excel] Summenfunktion

      Hi Thomas,

      vielleicht sollte ich einen der echten Ausdruecke als Bsp. bringen (nicht erschrecken ;-) ):

      Formel:

      P(tW>0) * exp(-s*t/h) * SUMME(z,i,i=0..100)


      in Excel:
      =$N3*EXP(-$D$5*$P3/$D$3)*ADVSUM(z,i,0,100)


      Die Faktoren (wie P(tW>0)) stehen fertig ausgerechnet
      im Arbeitsblatt und werden als Zellbezuege ($N3) in die Formel eingesetzt.

      Die gesuchte Funktion ADVSUM sollte nun den Ausdruck z=
      ( 1-r^(m-i) / (1-r^m) * ( (s*t/h)^i ) / i! )

      bzw. in Excel:
      =1-POTENCIA($D$7;$F4-"i")/(1-POTENCIA($D$7;"i") * (POTENCIA( ($D$5*$P4/$D$3);$H4)/FACT("i")))


      von i=0..100 summieren koennen ...

      Hast Du da eine Idee (siehe auch meine 2. Antwort) ??? Ich bin mir nicht sicher, ob ich Deine Vorstellungen ganz
      durchblicke, aber warum soll die Laufvariable Teil des Aufrufs
      sein? Normalerweise ist die Laufvariable eine interne Variable
      der Funktion und von aussen interessiert es mich nicht, ob ich
      die i, j oder otto nenne.

      Mit dem Aufruf AdvSum(Multiplikator, Minimum, Maximum)
      solltest Du doch dann keine Probleme haben. Das i definierst
      Du innerhalb der Funktion und benutzt es in einer
      For-Schleife.
      Gruesse,

      - Andreas

      • Antwort von nach 3 Tagen hilfreich
        Re^3: [VBA/Excel] Summenfunktion

        Hallo Andreas

        Wenn ich Dich richtig verstehe, dann willst Du den Parameter z im Aufruf als (beliebige) Funktion z(i) eingeben, wobei Du das i dann als Laufparameter der Summe haben willst, weswegen man der Funktion den Namen i bekanntgeben musst.

        Ich fürchte, da hast Du bei VBA wenig Chancen, zumindest meine Kenntnisse reichen da nicht aus. Ich könnte mir zwar vorstellen, so etwas in C hinzukriegen, aber in VBA gibt es meines Wissens nicht die Möglichkeit, solche Meta-Parameter zu definieren und zu verwenden.

        Sorry
        Thomas

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!