Excel: Eigene Funktionen mit VBA erstellen

Funktionen zur Verarbeitung mehrerer Zellen oder Bereiche

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
So wie Summe, Mittelwert, Anzahl usw. können Sie in VBA eigene Funktionen erstellen, die Werte aus verschiedenen Zellen herausholen und berechnen. Das ist zwar manchmal etwas knifflig, aber mit den Hinweisen in diesem Film kein Problem für Sie.
08:57

Transkript

Nein, ich brauche in diesem Video nicht zu erklären, wie die Summe funktioniert. Nein, ich brauche Ihnen auch nicht zu erklären, wie Sie mit Funktionen auf Zellen zugreifen können. Sie wissen alle, dass man über Formeln oder über Start, klick auf die Summen-Funktion oder Anzahl oder Mittelwert, ein Bereich markieren kann, Enter, und dann holt er sich von allen ausgewählten Zellen die entsprechenden Werte raus und in dem Fall zu mir dazu 0. Analog über den Funktions-Assitenten über die Kategorie Mathematik könnte ich die Funktion Summe aufrufen, Summe ist die bekannteste dieser Funktionen, Ok, und habe nun die Möglichkeit in Zahl 1, gemeint ist eigentlich Bereich 1, ein Bereich hier auszuwählen oder in Zahl 2 ein Bereich, Strg-Taste und noch ein Bereich hinzuzufügen. Ok. Und er würde mir von den Bereichen eben die Summe bilden und das Ergebnis, sehen Sie hier, getrennt mit einem Semikolon, ist die Summe. So was kann man natürlich auch programmieren. Ich muss nicht nur einen Wert verlangen, sondern ich kann sämtliche Werte von allen Zellen, die der Anwender, die Anwenderin ausgewählt hat, berechnen. Wie mache ich das? Ich wechsele nach Entwicklertools Virtual Basic und schreibe hier in diesem Modul eine neue Funktion. funcion Ich hätte ganz gerne eine Summe und zwar die Summer, so wie ich sie haben möchte. Ich nenne sie mal Summe_Fett. Mir ist aufgefallen, keine der Funktionen kann Formatierungen verarbeiten. Das heißt, ich kann nicht eine bedingte Summe der Gestalt machen, dass er nur die fetten oder roten oder grünen und so weiter Werte aufsummiert. Aber so was kann man doch programmieren. Summe_Fett soll mir also nur die Zahlen, die ich vorher fett formatiert habe, summieren. Dazu brauche ich ein Schlüsselwort, das heißt paramarray. Ich brauche einen Bereich, einen array. Dieser Bereich, dem gebe ich jetzt einen Namen, zum Beispiel Bereich, Klammer auf, Klammer zu. Da der Anwender natürlich über seine weiteren Textfelder mehrere Bereiche markieren kann, da der Anwender mit gedrückter Strg-Taste auch mehrere Bereiche markieren kann, muss das ein Bereich sein, Klammer auf, Klammer zu, und das Ergebnis meiner Summen-Funktion soll, As Double, eine beliebig große, kleine Kommazahl sein können. So ich brauche noch ein paar Variablen. Ich brauche innerhalb des Bereiches die einzelnen Markierungen. Diese Markierungen deklariere ich dim xlMarkierung und Achtung das ist eins der wenigen Bereiche, wo ich nicht mit einem Typ, also As Range, As Long, As integer und so weiter, arbeite, sondern im ganz allgemein vom Typ variant lassen muss, leider lassen muss. Genauso wie übrigens auch hier oben ParamArray Bereich. Ich darf hier nicht As Range schreiben, das wäre falsch. Aber jetzt kann ich innerhalb von dieser Markierung, von diesem Markierungskonglomerat, dim eine weitere Variable xlBereich definieren As Range, davon wiederum dim xlZelle, auf jede einzelne Zelle losgehen, As Range. Die Ergebnisse speichern wir wieder zwischen in dim dbls zum Beispiel wie Summe As Double. Wir müssen jetzt for each xlMarkiereung in Bereich, Klammer auf, Klammer zu, losgehen und For hat am Ende natürlich ein Next oder, machen wir es gleich sauber, next xlMarkierung. So holen wir jeden einzelnen dieser getrennten Markierungsbereiche raus. Jeder diese Bereiche wiederum hat for each xlbereich in xlMarkierung. verschiedene Selektionen, die da areas heißen. Ich greife auf die einzelnen Bereiche mit areas mit dem Schlüsselwort zurück. Und weil ich es hier vom Typ variant, also ohne einen Typ deklariert habe, hilft er mir nicht bei Punkt, ist Ihnen sicherlich aufgefallen, bekomme ich keine Auswahlliste für areas. Aber ich weiß, dass es so heißt. Next, beende ich die Schleife oder Next xlBereich. Und dann brauche ich noch eine dritte Schleife, nämlich For each xlZelle in xlBereich .Cells, hier bekomme ich jetzt eine Hilfe. Von der Sammlung aller Zellen, hole dir bitte jede Zelle raus, und übergibt sie an diese Variable xlZelle. Next xlZelle. Ja und dann kann das eigentliche Programm starten, das macht nicht sehr viel. Nämlich erstens damit ich sauber summiere, überprüfe ich noch if isnumeric. Bist du auch wirklich eine Zahl, xlZelle.Value, du Inhalt dieser Zelle? Wenn ja =True, kann ich auch weglassen, Then, End If nicht vergessen, dann und jetzt will ich ja natürlich nur die fetten Zellen einsammeln oder genauer die Zellen, deren Schrift auf fett formatiert ist, also ich überprüfe nochmal, If xlZelle .Font.Bold = True Then, machen wir gleich ein End if dahinter, dann bitte übergibt an diese Variable dbls, habe ich sie genannt, = das alte dbls und zähle hinzu + xlZelle.Value, den Inhalt von der Zelle. Ich muss es nicht machen, ich mache es, weil es gut sauberer strukturierter Code ist. dbls setze ich am Anfang auf 0. Und was ich auf jeden Fall machen muss, nach der Schleife, nachdem wir alle Bereiche durchlaufen haben, hole ich mir jetzt dbls wieder raus und übergebe es von rechts nach links an die Funktion, die ich da genannt habe Summe_Fett. Ja testen wir es doch mal. Das heißt, ich probiere das Ganze in Excel. Ich schreibe irgendeine Zahl rein 1, mit gedrückter Strg-Taste ziehe ich das runter, markiere von diesem Bereich ein paar Zellen, Start, Klick ihr seid fett, Start, ihr seid fett. Und du bist auch noch fett. Und später machen wir hier noch 100. Runterziehen + Strg -Taste. Und auch du 105 bis fett. Erster Test. Ich klicke hier rein, hole über Formeln meiner eigenen Funktion, damit Sie auch sehen, wie er das hier auflistet. benutzerdefiniert hole ich mir meine Summe_Fett Ok. Hier sehen Sie bei Bereich, weil ich eben mehrere Bereiche zulasse, kann ich einen Bereich auswählen, ich fange erstmal mit einem an, kann ich natürlich auch mehrere zulassen. Ok. Hier sagt er mir 54, wollen Sie sie überschlagen, ja es könnte hinhauen, 45 ist fett. Ich kann aber auch, nochmal Funktion, Summe_Fett, Ok, auf die erste Spalte losgehen, auf die zweite Spalte losgehen und der Wert müsste jetzt 105 größer sein als nebendran, jetzt zeigt er leider noch nichts an, schade. Es ist 195, ja, es stimmt also, gut. Zusammenfassend: Wenn Sie auf mehrere Zellen von einer Auswahl los gehen wollen, dann müssen Sie in VBA die Funktion folgendermaßen schreiben: Sie brauchen ein ParamArray, zum Beispiel von einem Bereich, durchlaufen jetzt jede Markierung dieses Bereichs, jede Area in diesem Bereich, von der Sammlung der Areas jeden einzelnen Area-Bereich und von diesem Bereich wiederum jede Zelle. Dieses Gerüst, das können Sie gerne verwenden, das kann ich für andere Beispiele benutzen und kann jetzt von jeder Zelle, xlZelle, auf ihnen Value, beispielsweise auf den Inhalt, losgehen und dort bestimmte Werte auslesen, die ich haben möchte, berechnen und am Ende natürlich, wie gehabt, an die Funktion das berechnete Ergebnis zurückschreiben.

Excel: Eigene Funktionen mit VBA erstellen

Schreiben Sie Ihre eigenen Excel-Funktionen. Als erfahrener Excel-Anwender lernen Sie, wie Sie mithilfe von VBA Berechnungen mittels selbst erstellter Funktionen automatisieren.

3 Std. 4 min (33 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Exklusiv für Abo-Kunden
Erscheinungsdatum:21.01.2015

Im Training wird Excel 2013 benutzt. Die Vorgehensweisen sind aber für alle Windows-Versionen von Excel identisch und leicht übertragbar.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!