Excel Macro: Muss wissen wie die SUMME()-Funktion funktioniert

  • Hi.
    Ich bin am Excel-Makro programmieren und brauch dringend einen Tip, ich finde nirgends brauchbare Anleitungen für mein Problem.
    Es geht um folgendes:

    Ich schreibe eine Public Function namens SummeDarunter, die ein paar Werte unter der aktuellen Zelle (selbe Spalte) aufsummiert.
    Also Bsp.: Ich schreibe in Zelle A1 rein: =SummeDarunter() und nach einem Druck auf Enter wird der aufsummierte Wert der Zellen A2-A10 in die Zelle A1 geschrieben.
    So weit so gut, jetzt das Problem:

    Ich weiß nicht wie man das anstellt, dass wenn ich nun die Zelle A1 markiere und die Auswahl nacht rechts ziehe (sagen wir z.B. bis Zelle D1), die Werte in B1, C1 und D1 autogefilled werden. D.h. Excel soll checken dass die Function summeDarunter in der Zelle B1 die Summen von B2+B3+...+B10 liefert, in C1 dann C2+C3+...+C10, etc.

    Ganz genauso wie die integrierte SUMME(X:Y) Funktion werkelt, wenn man die Auswahl vergrössert. Ich hoff das ist verständlich.

    Bräuchte bitte nen Codeschnippsel, oder noch besser gleich den kompletten Source der SUMME(X:Y) Funktion. Weiß nicht wie ich das in meine eigene Summen-Funktion integrieren kann.

    Bitte um Rat :o

    mfg,
    AntiBit

    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  • Zitat von AntiBit


    Ich weiß nicht wie man das anstellt, dass wenn ich nun die Zelle A1 markiere und die Auswahl nacht rechts ziehe (sagen wir z.B. bis Zelle D1), die Werte in B1, C1 und D1 autogefilled werden. D.h. Excel soll checken dass die Function summeDarunter in der Zelle B1 die Summen von B2+B3+...+B10 liefert, in C1 dann C2+C3+...+C10, etc.

    Ganz genauso wie die integrierte SUMME(X:Y) Funktion werkelt, wenn man die Auswahl vergrössert. Ich hoff das ist verständlich.


    du hast ja dann keine funktion SummeDarunter(), sondern SummeDarunter(XX), wobei XX die zelle ist, unter der summiert wird. wenn du die formel nun kopierst, sollte excel XX automatisch anpassen. dh du brauchst da keine sonderbehandlung in deinen code einbauen.

    hth
    michi

  • Hi.
    Ich hatte bis jetzt zwei Versionen von dem Makro:

    Nummer 1: summeDarunter() hat keinen Parameter. Ich hol mir die aktuelle Zelle über ActiveCell und berechne dadurch die Werte darunter. Wenn ich jetzt die Formel auf andere Zellen rüberziehe übernimmt er mir dort zwar die Formel =summeDarunter(), aber mit dem alten ausgerechneten Wert der Zellen A2-A10. Das heisst AktiveCell wird nicht neu ausgewertet. Erst nach einem Druck auf Enter wird das ActiveCell neu ausgewertet und angepasst, aber leider nicht automatisch nach dem rüberziehen.

    Nummer 2: summeParameter(spalte as String). Da kann ich jetzt z.B. = spalteDarunter("A") angeben um die Spalten in A aufzusummieren. Ziehe ich die Formel jedoch auf andere Spalten so ändert sich die Spalte nicht dementsprechend. Das heisst in Zelle B steht dann auch =summeDarunter("A"), sowie in Zelle C usw. Da übernimmt er das nicht automatisch.

    Ergo, doch nicht so einfach leider :(
    Ich hab in nem anderen Forum gelesen dass das gar nicht möglich sein soll in eigenen Funktionen so zu regeln wie in der hauseigenen SUMME-Funktion.
    Kann das wer bestätigen oder dementieren??

    mfg
    Anti

    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  • Probier es doch so:

    Code
    Function summeDarunter(aktuelleZelle As Range) As Variant
    	...
    	summeDarunter=...
    End Function



    du musst zwar jedes mal den parameter übergeben (also die zelle anklicken), dafür ändert excel den dann auch automatisch beim kopieren...

    lg michi

  • blödsinn.. das ergibt ja einen zirkelbezug :shinner:

    nein also das wär mir nur im moment eingefallen. es ist schon komisch im word gibts so eine funktion, die zb die summe aller zellen oberhalb berechnet. dass das im excel fehlt, verstehe ich nicht ganz

    aber vielleicht kommst du mit dem Range-Datentyp weiter, der wird nämlich normalerweise für Zellbezüge verwendet.

    lg michi

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!