habe eine Frage zu folgendem Code (in dem noch einige "Fehler" enthalten sind):
Function MyFunc(FirstRow As Long, Suchtext As String)
Dim Spalte As String
Application.Volatile
LastRow = WorksheetFunction.Match(Suchtext, _
ActiveSheet.Range("A" & FirstRow & ":A60000"), 0) + FirstRow - 2
Spalte = Split(ActiveCell.Address, "$")(1)
MyFunc = ActiveSheet.Name & "!" & Spalte & FirstRow & ":" & Spalte & LastRow
End Function
Funktionsweise soll sein: Im Worksheet(1) (z.B. "Overview") steht in Spalte A am Ende einer Tabelle der Suchtext, z.B. "Total". In die funktionsaufrufende Zelle (z.B. C2) soll nun ein Bezug als Text geschrieben werden: Overview!$C$15:$C$40 (die erste Zeile, hier z.B. 15, wird im Funktionsaufruf festgelegt).
Es tauchen allerdings folgende Probleme auf:
1) Wie ermittelt man die Zelle und das Worksheet der funktionsaufrufenden Zelle? ActiveSheet und ActiveCell liefern falsche Ergebnisse (verständlicherweise).
2) Wie sucht man am besten den Suchtext, der immer in Spalte A steht? In meinem Beispiel habe ich jetzt einfach mal "A15:A60000" gewählt. Muss man überhaupt eine Range angegeben oder gibt es eine Funktion die oben startet und nach unten "geht"? Das alles sollte mit möglichst wenig Rechenaufwand geschehen, da die Excel-Datei durch z.B. unzählige Summenprodukt-Formeln schon genug überlastet ist. Macht es Sinn, dies über eine Schleife zu lösen? Wie wirkt sich das auf die Rechenpower aus?
Viele Grüße,
Boris