Na, so schlimm ist das doch gar nicht,...
06.04.2011 13:03:55
Luc:-?
…Chris…! ;-)
Die Hilfszelle kann sich durchaus in derselben Mappe befinden, muss aber nicht unbedingt. Sie kann auch versteckt sein, das macht aber Löschung/FmlNeueintrag komplizierter. Deine udFkt, der du übrigens einen aussagekräftigeren Namen geben solltest, würde dann so aussehen…
Function meineFormel(Kategorie As String, ByVal Woche As Long, _
Hilfsspalte As String, Kennzahl As String, ByVal VorErg)
Dim Ze As Long, Sp As Long, Zelle As Range
With Sheets(Kategorie)
If IsEmpty(VorErg) Or VorErg = 0 Then
Sp = .Rows(2).Find(what:=Woche, LookAt:=xlWhole).Column
Set Zelle = .Columns(1).Find(what:=Hilfsspalte, LookAt:=xlWhole)
Ze = .Columns(1).Find(what:=Kennzahl, after:=Zelle, LookAt:=xlWhole).Row
meineFormel = .Cells(Ze, Sp).Value
Else: meineFormel = VorErg
End If
End With
End Function
Die ZellFml sähe dann bspw so aus: =meineFormel(B2;A2;D2;$E$1;$IV$1)
Hier wäre also $IV$1 die Adresse der Hilfszelle auf dem gleichen Blatt. In die schreibst du dann =C2, wenn deine udFktsFml in C2 steht. Allerdings brauchst du für jedes Auftreten der udFkt im Blatt eine eigene Hilfszelle, wenn dabei unterschiedl Werte geliefert wdn. Einmal ermittelt wird so vorrangig der schon ermittelte Wert verwendet. Löschst du die Hilfszelle auf die übliche Weise manuell, wird wieder neu berechnet. Anschließend musst du ebenfalls manuell den Verweis neu in die Hilfszelle setzen. Allerdings kannst du das auch per Button tun. Einfach den Vorgang des Verweissetzens per Makrorecorder aufzeichnen u.das entstandene Makro vernünftig umbenennen u.auf ein Zeichnungsobjekt in der Mappe legen (Rechte-Maustaste-Klick auf Objekt und entsprechenden Befehl wählen). Erweiterst du das Makro noch um den Löschvorgang, kannst du einen quasi FlipFlop erhalten: With Range("IV1"): If .HasFormula Then .Clear Else .Formula = "=C2": End With (statt : ggf neue Zeile; bei mehreren Hilfszellen wird's etwas komplizierter!).
Natürlich könnte man das auch ohne Hilfszelle über Namen (benannte Fml bzw Konstante) oder nur in der udFkt (VorErg dann nicht als Argument, sondern als Static-Variable organisieren) realisieren → beides ist aber u.U. problematisch bei Mehrfacheinsatz der udFkt! Deshalb versuche es erst mal besser mit Hilfszelle(n).
Gruß Luc :-?