Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln

Diskutiere und helfe bei Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln im Bereich Microsoft Office im Windows Info bei einer Lösung; Hallo liebe Cummunity Ich habe folgende Situation und würde mich über einen Tipp freuen: In meinem Arbeitsblatt habe ich in einer Spalte verschiedene... Dieses Thema im Forum "Microsoft Office" wurde erstellt von Thom55, 29. November 2022.

  1. Thom55
    Thom55 Gast

    Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln


    Hallo liebe Cummunity Ich habe folgende Situation und würde mich über einen Tipp freuen: In meinem Arbeitsblatt habe ich in einer Spalte verschiedene Nummer die manuell erfasst werden. Auf Grund der Nummer soll dann in einer anderen Spalte bzw. Zelle eine Berechnung nur für diese Zelle ausgelöst werden. Somit bin ich mal zu Schluss gekommen dass es ein "Makro ausführen wenn Zellinhalt sich ändert" sein sollte. Beispiel: In Spalte A habe ich einen Wert der zwischen 0 und 999 sein kann. Auf Grund von diesem Wert soll in Zelle D1 das Ergebnis aus einer Formel eingetragen wer
     
  2. Thom55 Win User

    Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln

    Hallo Andreas
    Herzlichen Dank. Das klappt ja perfekt. Genau so habe ich es mir vorgestellt. ;-)
    Kaffee und Kekse sind bereit... Das mit dem Hometrainer... naja
    Danke und schöne Festtage
  3. Andreas Killer Win User

    Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln

    Hallo Thom,
    Kopier den Code unten in ein reguläres Modul, dann ändere die Formel in Spalte KNUMH_0 so ab:

    =WENN(B2="x";"";WENN(BB2="x";"";WENN(AQ2=0;"";WENN(BO2<=HEUTE();"";KNUMH([@[SAP_Tarif_Tabelle]];Tabelle415;Tabelle3;Tabelle4;Tabelle1)))))

    Da die Formel nun kein Array mehr enthält kann sie als normale Formel eingegeben werden.
    BTW, die Marotte jede Formel mit + zu spicken bringt keinerlei Vorteile.

    Funktioniert so korrekt, aber ob Du damit glücklich wirst... bei 50K Zeilen denke ich Du kannst Dir schon mal Kaffee und Kekse holen.

    Du kannst auch statt der kompletten Tabellen probieren nur eine Zelle an die UDF zu übergeben, könnte sein das dies schneller geht weil die Calculation-Engine nicht so viele Zellen übergeben muss.
    Allerdings wird die UDF dann nicht mehr automatisch ausgeführt wenn sich eine relevante Zelle ändert die nicht übergeben wurde...

    Das deckt nun den Fall für Spalte KNUMH_0 ab, für KNUMH_1 musst Du die Tabelle(n) in "Formeln_415" und/oder "Formeln_3" kopieren, ändern und dann die UDF entsprechend anders aufrufen.

    Also viel Kaffee und Kekse holen und als Ausgleich ggf. auf einem Hometrainer genießen. ;-)

    Andreas.

    Option Explicit

    Function KNUMH(ByVal Nummer As Range, ThisTable As Range, SourceTable As Range, ThisFields As Range, SourceFields As Range) As Variant
    Dim Table As ListObject
    Dim TableColumn As ListColumn
    Dim ThisLO As ListObject
    Dim ThisLC As ListColumn
    Dim SourceLO As ListObject
    Dim SourceLC As ListColumn
    Dim R As Range
    Dim MatchWhat, MatchWhere
    Const DefFormula As String = "=INDEX(@KNUMH,MATCH(@MatchWhat,@MatchWhere,0))"
    Dim MyFormula As String

    Set ThisLO = ThisTable.ListObject
    Set SourceLO = SourceTable.ListObject

    Set Table = ThisFields.ListObject
    Set TableColumn = Table.ListColumns(CStr(Nummer))
    MatchWhat = Array()
    For Each R In TableColumn.DataBodyRange
    If Not IsEmpty(R) Then
    Set ThisLC = ThisLO.ListColumns(CStr(R.Value))
    ReDim Preserve MatchWhat(0 To UBound(MatchWhat) + 1)
    MatchWhat(UBound(MatchWhat)) = Intersect(Nummer.EntireRow, ThisLC.DataBodyRange).Address(0, 0)
    End If
    Next
    MatchWhat = Join(MatchWhat, "&")

    Set Table = SourceFields.ListObject
    Set TableColumn = Table.ListColumns(CStr(Nummer))
    MatchWhere = Array()
    For Each R In TableColumn.DataBodyRange
    If Not IsEmpty(R) Then
    Set ThisLC = SourceLO.ListColumns(CStr(R.Value))
    ReDim Preserve MatchWhere(0 To UBound(MatchWhere) + 1)
    MatchWhere(UBound(MatchWhere)) = SourceLO.Name & "[" & CStr(R.Value) & "]"
    End If
    Next
    MatchWhere = Join(MatchWhere, "&")

    MyFormula = DefFormula
    MyFormula = Replace(MyFormula, "@KNUMH", SourceLO.Name & "[KNUMH]")
    MyFormula = Replace(MyFormula, "@MatchWhat", MatchWhat)
    MyFormula = Replace(MyFormula, "@MatchWhere", MatchWhere)
    KNUMH = Application.Evaluate(MyFormula)
    End Function
  4. Andreas Killer Win User

    Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln

    Da wird ein Makro auch nicht helfen. Zeigt mal Deine Datei, mal kucken ob es da nicht ein besseres Konzept gibt.
    Mach am besten eine Kopie der Originaldatei und anonymisiere die erforderlichen Daten. Laden dazu bitte diese Datei herunter
    https://www.dropbox.com/s/rkfxuh85j5wyj9y/modAnonymize.bas?dl=1
    Öffnen die Excel-Datei
    Klicke mit der rechten Maustaste auf die Registerkarte des Tabellenblattes
    Wähle "Code anzeigen".
    Drücke STRG+M
    Wählen die heruntergeladene Datei aus und importiere sie
    Schließe den VBA-Editor
    Wähle die Zellen mit den vertraulichen Daten aus
    Drücke Alt+F8
    Wähle das Makro
    Klicke auf Ausführen

    Lade die Datei auf OneDrive (oder einen anderen Online File Hoster Deiner Wahl) hoch und veröffentliche den Download-Link hier.
    https://support.office.com/de-de/ar...-folders-9fcc2f7d-de0c-4cec-93b0-a82024800c07
    Andreas.
  5. Andreas Killer Win User

    Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln

    Ok, mir ist klar was Du willst.
    Problem: Woher soll ein Makro (oder was auch immer) wissen welche Felder mit welchen verglichen werden sollen und das bei 1000 verschiedenen Fällen?
    Also brauchen wir (theoretisch) 2 Tabellen, die haben als Überschrift jeweils die möglichen Nummern also 0 bis 999 und darunter ist in der ersten Tabelle je Nummer die Felder die in Tabelle415 zum Vergleich genommen werden sollen. Das entspricht dem Part "F2&BI2&K2&L2&R2&AQ2&BO2" in VERGLEICH.

    [​IMG]

    In der 2ten Tabelle dito die Felder in denen gesucht werden soll, das entspricht dem Part Tabelle3[BEINH]&Tabelle3[ZZFARBIG]&Tabelle3[IHKOMP]&Tabelle3[AZAFOV]&Tabelle3[AZAPLZ]&Tabelle3[TABELLENo]&Tabelle3[DATBI]

    [​IMG]

    Nun könnte ein Makro anhand der Nummer in AQ (in diesem Fall 879) in die erste Tabelle kucken, die Feldnamen einlesen, den Suchstring bilden, dann in die 2te Tabelle kucken, die Feldnamen einlesen und dann z.B. die INDEX/VERGLEICH Formel ausführen.
    Theoretisch geht das schon, aber bis Du die beiden Tabellen mit allen Feldern (das sind immerhin 14.000!) fertig hast, ich denke da bist Du mit dem abändern der Formel schneller.
    Wenn Du nach Spalte AQ filterst, dann kannst Du die oberste Formel anpassen und nach unten füllen, dann die nächste Nummer in AQ filtern und dito.
    D.h. manuell die Formeln anpassen machst Du in rund 2000 Schritten, das ist immer noch 7x schneller bis Du überhaupt die beiden Tabellen fertig hast. Geschweige denn das Makro / UDF geschrieben, getestet hast. Und die Berechnungszeit wird bei 50k Zeilen insgesamt deutlich leiden da das Makro ja nicht unerheblich mehr Schritte machen muss als die Formel alleine.
    Andreas.
  6. Thom55 Win User

    Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln

    Hallo Andreas
    Danke für dein Feedback. Das mit deinem Code zum anonymisieren habe ich nicht hingekriegt. Habe aber meine Datei selber soweit anonymisiert und verkleinert damit ersichtlich ist was ich genau vor habe.
    Unter folgendem Link kann die Excel Datei (xlsm) heruntergeladen werden:
    https://conzeptx.ch/TLOG/index.php
    In der Spalte AQ steht eine Zahl, z. Bsp. 850. Auf Grund dieser Zahl gibt es in der Spalte BK + BL eine Index-Formel die mir das Ergebnis ausspuckt. Bei 866 ist diese Formel wieder anders und bei 857 etc. auch...
    Meine Idee ist, dass wenn ich in AQ2 die Zahl eintrage, dass es dann das Ergebnis (nicht die Formel) in BK2 + BL2 schreibt. So im Sinne von Makro ausführen wenn Zellinhalt sich ändert... Das mit der Index-Formel funktioniert soweit schon, muss diese einfach jeweils manuell in der Spalte BK nachtragen. Ist aber sehr mühsam und auch von der Performance her ist das bei ca. 50K Zeilen nicht grad optimal...
    Ich hoffe ich konnte mich verständlich ausdrücken. ;-)
    Im Voraus vielen Dank für deine Zeit
    Beste Grüsse
    Thom
  7. User Advert


    Hi,

    willkommen im Windows Forum!
Thema:

Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln - Microsoft Office

Die Seite wird geladen...

Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln - Similar Threads - Makro ausführen Zellinhalt

Forum Datum

Mit Makro Hyperlink von Tabelle1 auf Tabelle2 in einer Mappe ausführen

Mit Makro Hyperlink von Tabelle1 auf Tabelle2 in einer Mappe ausführen: Moin, weiß jemand, warum Selection.Hyperlinks1.Follow NewWindow:=False, AddHistory:=True nicht innerhalb einer Mappe in Excel funktioniert und wie der Befehl im Makro stattdessen heißen muss? Es...
Microsoft Office 28. Dezember 2022

Makro anwenden wenn sich die Anzahl an Zeilen wöchentlich ändert

Makro anwenden wenn sich die Anzahl an Zeilen wöchentlich ändert: Hallo zusammen,wir müssen wöchentlich eine OP-Liste versenden, die unheimliche lange zu formatieren braucht. In diesem Zusammenhang dachte ich mir, ich probiere es mal als Anfänger mit Makros aus...
Microsoft Office 2. Juni 2021

Makro ändert Währungseinstellung

Makro ändert Währungseinstellung: Hallo, kann mir jemand sagen was oder warum Excel das folgende tut: Ich habe ein Makro geschrieben, dass mir eine neue Datei erstellt. Vereinfacht gesagt Das klappt auch alles super. Aber...
Microsoft Office 6. Februar 2020

Makro ausführen nach Datensatzänderung in Serienbrief

Makro ausführen nach Datensatzänderung in Serienbrief: Guten Tag Liebe Community Ich arbeite momentan an einem Word-Serienbrief, der ein Bild enthält. Je nach Datensatz wird logischerweise ein anderes Bild angezogen. Wenn ich mit den beiden Pfeilen...
Microsoft Office 13. August 2019

Excel VBA – Makro für ein Arbeitsblatt von zwei verschiedenen Arbeitsblättern aus ausführen

Excel VBA – Makro für ein Arbeitsblatt von zwei verschiedenen Arbeitsblättern aus ausführen: Hallo Ich habe in der Tabelle 1 ein Makro, das eine Prozedur für Tabelle 1 ausführt. Nun möchte ich, dass ich das Makro für die Tabelle 1 ebenfalls, zusätzlich von der Tabelle 2 aus auslösen...
Microsoft Office 1. März 2019

nach Upgrade läßt sich das Makro nicht ausführen

nach Upgrade läßt sich das Makro nicht ausführen: Wir haben mit 2 Rechnern von Outlook 2007 auf Outlook 2013 aktualisiert. (natürlich jeder mit eigener Lizenz) Meine Kollegin kann wie gehabt das selbst erstellte Makro ausführen und bekommt beim...
Microsoft Office 2. Mai 2017

Excel VBA Makro - Dynamische Ausführung eines Makros

Excel VBA Makro - Dynamische Ausführung eines Makros: Hallo liebe Community, bin relativ neu in VBA und habe folgendes Problem. Ich möchte eine Nutzwertanalyse mit Excel implementieren. Soweit so gut. Hat alles wunderbar funktioniert und es läuft...
Microsoft Office 18. April 2017
Makro ausführen wenn Zellinhalt ändert mit verschiedenen Berechnungsformeln solved
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.