Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1208to1212
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

@Luc Matrix Zuordnung

@Luc Matrix Zuordnung
Maris
Hallo Luc,
wie kann ich denn den KatVektor aktualisieren. Funktioniert nur wenn ich den Zellverbund aufhebe und in die Zellen klicke und mit Strg + Shift + Return abschließe.
Gruß,
Maris
Hast du die HptFml wie beschrieben aktu...
04.04.2011 15:47:25
Luc:-?
…alisiert, Chris?
KatVektor: =1^JETZT()*…
Dann würde Neuberechnung reichen, falls das nicht schon die Automatik bei Änderung eines Wertes macht.
Gruß Luc :-?
AW: Hast du die HptFml wie beschrieben aktu...
05.04.2011 09:40:44
Maris
Hi Luc,
du hattest recht ich habe die Änderung vergessen jetzt läuft es wunderbar und ist auch in der Geschwindigkeit absolut top :-D!!!
Eine Frage an dich zu Optimierung folgendes Code... Mein Problem ist das die eingelesen Werte immer wieder neuberechnet werden müssen als nach einer einmaligen Berechnung nicht in den Zellen verbleiben.
Code:
  • 
    Function meineFormel(Kategorie As String, _
    Woche As Long, _
    Hilfsspalte As String, _
    Kennzahl As String) As Variant
    Dim Ze As Long
    Dim Sp As Long
    Dim Zelle As Range
    With Sheets(Kategorie)
    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
    Application.Volatile
    End With
    End Function
    

  • Formel:
  • =meineFormel(B2;A2;D2;$E$1)

  • Kann man das optimieren?
    Gruß,
    Maris
    Anzeige
    Neues Thema, b.dem viele VBA-Freaks...
    05.04.2011 16:31:13
    Luc:-?
    …helfen können, Maris,
    nicht nur ich… ;-)
    Optimieren, mit welchem Ziel? Sollen die Werte nur 1x berechnet wdn und dann fest bleiben? Da wäre schon mal Application.Volatile fehl am Platz, denn dadurch wird bei jeder Änderung - egal wo, jedem Dateiöffnen und x anderen Vorgängen neu berechnet (obwohl ich da in Bezug auf udFktt mitunter Zweifel habe). Allerdings müsste dann auch immer wieder dasselbe raus kommen, falls die Inhalte der Zellen in den udFkts-Argumenten sich nicht zwischendurch ändern.
    Natürl kann man das sicher auch anders (vb-klassisch) aufbauen, aber das wäre dann wohl eher etwas langsamer. Übrigens schreibt man den Volatile-Befehl am Pgm-Anfang nach den Deklarationen.
    Gruß Luc :-?
    Anzeige
    AW: Neues Thema, b.dem viele VBA-Freaks...
    05.04.2011 16:51:13
    Maris
    Hi Luc,
    bei deiner Matrixformel ist die Berechnung super schnell deswegen die Frage an dich ;-)! Falsch ausgedrückt... im vorherigen Post... Die Werte können sich änderen, aber das tun sie i.d.R. nicht... am liebsten wäre mir daas die Formel nur auf anstoßen von mir aktualisiert wird!
    Gruß,
    Maris
    ...Letzteres kann man bei jeder Fml über...
    05.04.2011 19:51:38
    Luc:-?
    …Zulassen von Iteration und eine Hilfszelle mit Iterationszähler erreichen, Chris.
    Dazu gibt's Bspp im Archiv zu Themen wie „heutiges Datum festschreiben”. Aber, da du eine udFkt verwendest, kann das auch anders gemacht wdn. Bspw könntest du als letztes Argument der udFkt noch eine Hilfszelle aufnehmen. Wenn die leer ist, wird die udFkt neu berechnet, sonst nur der Wert der Hilfszelle als Rückgabewert der udFkt verwendet. In der Hilfszelle verweist du nach Durchführung der Berechnung einfach auf die Ergebniszelle der udFkt. Soll neu berechnet wdn, löschst du die Hilfszelle wieder usw. Dabei muss aber auch Iteration zugelassen sein, weil das einen Zirkelverweis ergeben dürfte, den Xl feststellen kann.
    Gruß Luc :-?
    Anzeige
    AW: ...Letzteres kann man bei jeder Fml über...
    06.04.2011 09:20:38
    Maris
    Hi Luc,
    vielen Dank für deiner Erläuterung des Lösungsansatzes... Für mich ist das leider zu komplex nach nachzuvollziehen, geschwewige umzusetzen. Soll die Hilfszelle auch in der Excelmappe vorhanden sein? Wie soll ich die Hilfszelle wieder löschen....
    Fragen über Fragen.... Könntest du mir vielleicht ein wenig helfen?
    Gruß,
    Maris
    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 :-?
    Anzeige
    AW: Na, so schlimm ist das doch gar nicht,...
    06.04.2011 14:41:29
    Maris
    Hab jetzt mal die Formel angepasst... meine Hilfszelle ist in X1 meine udfkt in E2 also
    =meineFormel(B2;A2;D2;$E$1;$X$1)
    wenn ich jetzt in X1 = C2 einsetzte erhalte ich doch zunächsteinmal einen Zirkelbezug... weiterhin müßte ich für jede Zeile in meiner Tabelle eine eigene Hilfszelle erstellen oder für jede Zelle in der udfkt enthalten ist?
    lg,
    Maris
    Ja, deshalb ja auch Iteration zulassen u...
    06.04.2011 17:34:38
    Luc:-?
    …das m.1 Hilfszelle pro FmlZelle hatte ich auch schon geschrieben, Chris…!
    Wenn das zu viel wird, hilft wohl nur noch manueller Berechnungsmodus und evtl kurzzeitiges automatisches Umschalten bei manuellen Änderungen über Ereignisprozeduren:
    1. Automatik einschalten in Worksheet_Change und…
    2. wieder ausschalten in Worksheet_Calculate → dieses Ereignis wird erst nach Abschluss aller Berechnungen des Blattes ausgelöst, das 1. schon bei der 1.Änderung!
    Gruß Luc :-?
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige