Clever-Excel-Forum

Normale Version: VBA Summewenn
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Morgen Forum!

Ich würde gern eine interne Übersicht dokumentieren und habe versucht, alles in der Mappe im Anhang vereinfacht darzustellen.

Auf einem Blatt werden die wochenweisen Produktionszahlen dargestellt, nur für die grobe Übersicht der zu erwartenden Auslastung. Das ist alles an die ERP mit PQ Abfrage gekoppelt.
Ein weiteres Blatt, später dann nicht sichtbar, soll einmalig jede Woche die Summe der geplanten Mengen dokumentieren bzw. den Auftragsvorlauf festhalten.

Ich habe mir zwar eine Logik überlegt, damit ich mit einfachen Mitteln eine VBA stricken kann, doch die geht nicht, da ich keine Formeländerung prüfen kann. Ich bin also VBA "Anfänger" Wink

Ich bin für jede Idee und jeden Lösungsansatz dankbar Smile

Code:
Ich stehe am Anfang, da die Änderungen der Formelergebnisse nicht festgestellt werden :-/

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D2:D1000")) Is Nothing Then
Call SummeWenn
End If
End Sub
Hallo,

wenn Du uns jetzt noch sagst, welchen Wert Du aus der Übersicht brauchst. Denn ein SUMMEWENN würde ja mehrere Werte addieren, die ein bestimmtes Kriterium aufweisen. In der Tabelle ist das einzige auswertbare Kriterium wohl die KW und die kommt ja nur einmal vor. Oder willst du nur den Einzelwert der KW anzeigen?

Für letzteres reicht diese Formel:
D2 =WENN(D8=1;WENNFEHLER(VERWEIS(B8&A8;Übersicht!$A$2:$A$17&Übersicht!$B$2:$B$17;Übersicht!$L$2:$L$17);"");"")
Einfach nach unten kopieren.
Hallo Michael,

ich möchte aus dem Blatt "Übersicht" die Spalte L:L als Summe in Blatt "Entwicklung" in Spalte E einmalig eintragen, wenn der Prüfwert "1" erfüllt ist. Der Prüfwert gibt zurück, ob Tag heute() = Tag Zellwert übereinstimmt (Summe nur am Freitag berechnen) und noch keine Summe erzeugt wurde (nicht jedes Mal neu, wenn an einem Freitag die Mappe geöffnet wird).
Wenn ich das mit einer Formel mache, erzeuge ich einen Zirkelbezug und habe ein neues Problem.

Zur Formelidee:
Die Werte in Blatt "Übersicht" Spalte L:L sind aus einer PQ Abfrage zusammensetzen (Summe Spalte C bis K) und ändern sich mit jedem öffnen der Datei.
Die Werte im Blatt "Übersicht" Spalte Jahr und KW sind zudem fortlaufend (nächste Woche rutscht also KW 14 in Zeile 2).

Hintergrund für den statischen Wert / ohne Formel:
Die Produktionszahlen, die in der Übersicht / Menge dargestellt werden, verändern sich stetig. Die Mengen sinken im Laufe der Woche bzw. werden abgearbeitet, neue Aufträge kommen hinzu.
Okay. Verstanden. Wie Du schon geschrieben hast, löst die Änderung durch eine Formel das Change-Ereignis nicht aus.

Man könnte die Aktualisierung per Makro machen und dabei gleich den Wert ermitteln und in die Zelle schreiben.

Mir ist jetzt aber noch nicht ganz klar, welche Summen wohin geschrieben werden sollen. Wenn ich es richtig verstanden habe, soll auf dem blatt "Entwicklung" in jeder Zeile eine Summe stehen, in der in spalte D eine 1 steht. Die 1 steht ja per Formel immer in der aktuellen KW. Dann soll also daneben die gesamte Summe der Spalte L aus dem Blatt "Übersicht" stehen? Sollen die alten Summen bestehen bleiben und nur die neue ergänzt werden?

Das ganze könnte zB so aussehen:
Code:
Sub Abfrage_aktualisieren()
Dim rngFind As Range
ActiveWorkbook.Connections("Abfrage - Abfrage1").Refresh
Set rngFind = Sheets("Entwicklung").Range("D2:D100").Find(what:=1, LookIn:=xlValues, LookAt:=xlWhole)
If Not rngFind Is Nothing Then
    rngFind.Offset(0, 1).Value = WorksheetFunction.Sum(Sheets("Übersicht").Range("L:L"))
End If
End Sub
Vielen lieben Dank Michael! Es funktioniert wunderbar. Ich muss nur noch einen Code Schnipsel suchen, damit das Makro erst nach dem Aktualisieren auslöst und dann bin ich fertig.

15
Das Makro aktualisiert doch die Abfrage bereits. Statt die Abfrage direkt zu aktualisieren kannst Du das Makro aufrufen (z. B. über eine Schaltfläche)
Das stimmt, die Abfrage ist aber so groß, dass eine 0 als Summe drin steht. Ich habe einfach das Event geändert.
Code:
'Arbeitsmappe
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Entwicklung
End Sub

'Modul
Sub Entwicklung()
Set rngFind = Sheets("Entwicklung").Range("D2:D100").Find(what:=1, LookIn:=xlValues, LookAt:=xlWhole)
If Not rngFind Is Nothing Then
    rngFind.Offset(0, 1).Value = WorksheetFunction.Sum(Sheets("Summen").Range("L:L"))
End If
End Sub