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.
Tabelle:
| A | B | C | D | E | F | G |
1 | Bereich | Kategorie | Anmerkung | | | Suchbegriff 1 | Suchbegriff 2 |
2 | SC | 1.1 | abc | | abc | 1.1 | SC |
3 | SK | 1.1 | def | | ghi |
4 | SC | 1.1 | ghi | | mno |
5 | SK | 1.2 | jkl | | #Zahl! |
6 | SC | 1.1 | mno | | #Zahl! |
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
|