Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Aggregat-Funktion in VBA

Forumthread: Aggregat-Funktion in VBA

Aggregat-Funktion in VBA
09.10.2020 09:47:44
Max
Hallo allerseits,
ich bin seit einigen Tagen am verzweifeln, weil ich es nicht hinbekomme eine Funktion die ich mit Excel "normal" programmiert habe in VBA umzusetzen. Und zwar handelt es sich um die Aggregat-Funktion.
Folgende Tätigkeit würde ich gerne in Excel über VBA realisieren.
Excel-Tabelle:
https://www.herber.de/bbs/user/140755.xlsx
Hierbei steht folgende Formel im Feld "E2" und wurde nach unten durch ziehen erweitert.
=INDEX(C:C;AGGREGAT(15;6;ZEILE(B:B)/((B:B=$F$2)*(A:A=$G$2));ZEILE()-1))
Das klappt auch wunderbar wie in der dargestellten Tabelle zu sehen ist.
Leider scheitert es bis jetzt an der Umsetzung dessen in VBA
Laut meinen bisherigen Recherchen ist es nicht möglich mein Anliegen mittels Application.WorksheetFunction.Aggregate zu realisieren, sondern nur über evaluate(….).
Leider bin ich ein totaler VBA-Anfänger und weiß noch nicht immer, wie die korrekte Syntax bei VBA ist.
Mein Versuch sieht in etwa so aus. Das größte Problem ist es das dritte Eingabefeld bei der Aggregat Funktion korrekt einzugeben.
Ich verzichte zunächst auf die vorgeschaltete Index-Funktion um es übersichtlicher zu gestalten. Am Ende sollte da natürlich auch noch die Index-Funktion eingebaut werden.
Sub TestAggregate()
Dim res As Long
Dim sh As Worksheet
Set sh = ActiveWorkbook.Sheets("Tabelle1")
res = Evaluate("=AGGREGATE(15,6,(sh.Range("B:B").Row)/((sh.range("B:B")=sh.range("F2").Value)*(  _
_
sh.range("A:A")=sh.range("G2").Value)),1)")
MsgBox res
End Sub

Könnte mir jemand helfen und zeigen, wie die AGGREGATE Funktion richtig auszusehen hat?
Dies ist gerade ein sehr stumpfes Beispiel, bei der ich zunächst nur die kleinste Zeile angezeigt bekommen möchte. Im weiteren Verlauf würde ich diese Aggregat Funktion in andere Funktionen einbinden.
Viele Grüße und Danke
Max
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aggregat-Funktion in VBA
09.10.2020 09:57:56
Daniel
Hi
wenn du Evaluate verwendest, muss die Formel genauso geschrieben werden, wie sie in einem englischen Excel in einer Zelle stehen würde.
das kannst du mit Hilfe des folgenden Befehls im Direktfenster leicht selber ermitteln:
=Selection.Formula

ggf in der Formel vorkommende Anführungszeichen müssten noch verdoppelt werden.
Gruß Daniel
Anzeige
AW: Aggregat-Funktion in VBA
09.10.2020 11:13:24
Max
Hallo Daniel,
super, das funktioniert schonmal ganz gut. Ich kriege zumindest Ergebnisse angezeigt.
Ist es möglich in die evaluate Funktion auch noch eine Variable einzubauen?
Damit mir auch die anderen Ergebnisse von Aggregat angezeigt werden.
Das sollte dann in etwa so aussehen.
Sub TestAggregate()
Dim res As Long
Dim k as Long
With ActiveWorkbook.Sheets("Tabelle1")
For k = 1 to 30
res = Evaluate("=AGGREGATE(14,6,ROW(B:B)/((B:B=$F$2)*(A:A=$G$2)),k)")
MsgBox res
Next k
End With
End Sub

Anzeige
AW: Aggregat-Funktion in VBA
09.10.2020 11:37:50
Werner
Hallo,
Variable innerhalb einer Formel so:
res = Evaluate("=AGGREGATE(14,6,ROW(B:B)/((B:B=$F$2)*(A:A=$G$2))," & k & ")")

1. Die Formel mit Gänsefüßchen "beenden"
2. mit & die Variable einbinden
3. mit & Gänsefüßchen die Formel "fortsetzen"
Gruß Werner
Anzeige
AW: Aggregat-Funktion in VBA
09.10.2020 11:53:21
Max
Hallo Werner,
ich danke dir vielmals. Es funktioniert perfekt!
Vielen Grüße und ein schönes Wochenende!
Max
Gerne u. Danke für die Rückmeldung. o.w.T.
09.10.2020 12:18:06
Werner
;
Anzeige

Infobox / Tutorial

Aggregat-Funktion in VBA umsetzen


Schritt-für-Schritt-Anleitung

Um die Aggregat-Funktion in VBA korrekt zu nutzen, befolge diese Schritte:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul hinzufügen: Klicke im Projekt-Explorer mit der rechten Maustaste auf eine Arbeitsmappe, wähle Einfügen und dann Modul.

  3. Code eingeben: Kopiere und füge den folgenden Code in das Modul ein:

    Sub TestAggregate()
       Dim res As Long
       Dim k As Long
       With ActiveWorkbook.Sheets("Tabelle1")
           For k = 1 To 30
               res = Evaluate("=AGGREGATE(14,6,ROW(B:B)/((B:B=$F$2)*(A:A=$G$2))," & k & ")")
               MsgBox res
           Next k
       End With
    End Sub
  4. Variablen anpassen: Stelle sicher, dass die Zellen $F$2 und $G$2 die richtigen Werte enthalten, um die Aggregation korrekt durchzuführen.

  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: Typkonflikt
    Überprüfe, ob Du die richtigen Datentypen verwendest. In der Aggregat-Funktion sollte res als Long deklariert sein.

  • Fehler: Unzureichende Ergebnisse
    Stelle sicher, dass die Zellen, auf die Du verweist, die erforderlichen Werte enthalten und dass die Formel korrekt formatiert ist.

  • Fehler: Formel nicht erkannt
    Wenn die Formel nicht erkannt wird, könnte es an den Anführungszeichen liegen. Wenn Du die Formel in Evaluate verwendest, müssen Anführungszeichen verdoppelt werden.


Alternative Methoden

Eine alternative Methode zur Nutzung der Aggregat-Funktion in Excel ist die Verwendung von Array-Formeln. Diese ermöglichen ebenfalls die Aggregation von Daten, benötigen jedoch eine andere Syntax. Beispielsweise könnte eine Array-Formel so aussehen:

=AGGREGATE(14, 6, A:A/(B:B=$F$2), 1)

Diese Formel kann dann in eine Zelle eingegeben werden, indem Du CTRL + SHIFT + ENTER drückst, um sie als Array-Formel zu aktivieren.


Praktische Beispiele

Hier ist ein praktisches Beispiel, um die Aggregat-Funktion in verschiedenen Szenarien zu verwenden:

  1. Minimale Zeile finden: Um die kleinste Zeile zu finden, die bestimmten Kriterien entspricht:

    res = Evaluate("=AGGREGATE(15,6,ROW(B:B)/((B:B=$F$2)*(A:A=$G$2)),1)")
  2. Maximum ermitteln: Um den höchsten Wert in einer bestimmten Spalte zu finden:

    res = Evaluate("=AGGREGATE(14,6,C:C/(B:B=$F$2),1)")

Tipps für Profis

  • Verwendung von Variablen: Nutze Variablen in Deinen Formeln, um dynamische Ergebnisse zu erhalten.
  • Debugging: Verwende das Direktfenster im VBA-Editor, um den Wert von Variablen zu überprüfen. Du kannst beispielsweise Debug.Print res verwenden, um den aktuellen Wert von res zu sehen.
  • Optimierung: Teste Deine Formeln in Excel, bevor Du sie in VBA implementierst, da dies die Fehlersuche erleichtert.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die Aggregat-Funktion in einer anderen Excel-Version verwenden?
Antwort: Die Aggregat-Funktion ist in den meisten modernen Excel-Versionen verfügbar. Stelle sicher, dass Du die richtige Syntax verwendest, die für die jeweilige Version gilt.

2. Frage
Gibt es Einschränkungen bei der Verwendung von Aggregat-Funktionen in VBA?
Antwort: Ja, einige Funktionen wie AGGREGATE können in VBA Einschränkungen aufweisen. Stelle sicher, dass Du die richtigen Argumente verwendest und die Formel korrekt formatierst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige