Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


Performance Problem
#1
Hallo und erstmal einen wunderschönen Sonntag gewünscht,

brauche mal wieder einen Denkanstoß:
habe eine Mappe -> Auswertung. Diese bezieht Daten aus der Mappe ->Liste. Hier liegt eine Grundliste aller relevanten Daten drin mit bis zu 30000 Datensätzen.
In der Mappe Auswertung werden nun die Daten mit verschiedenen Bedingungen ausgewertet, wie z.B. mit dieser Formel->
=ZÄHLENWENNS([liste_Bockenheim.xlsm]Liste!$F$1:$F$65536;'Jahresübersicht'!$B16;[liste_Bockenheim.xlsm]Liste!$G$1:$G$65536;CU$32;[liste_Bockenheim.xlsm]Liste!$A$1:$A$65536;'A (7)'!$C$32)
So ähnliche Formeln habe ich ca. 2200 pro Auswertungsblatt.
In der Mappe Auswertung gibt es je nach Stadtteil bis zu 30 solcher Bewertungsblätter (Auswertungsblätter).
Ändere ich nun in "Liste" die Daten, also kopiere ich eine aktuelle Liste rein, was ca. 1 mal im Jahr gemacht werden muss, dann dauert die Berechnung eeeeeewig.
Wenn es nicht gar ganz abstürzt.

Hat da jemand eine andere Idee?

Ich wäre für jede nur denkbare Lösung dankbar.

Danke fürs lesen und Grüße
to top
#2
Hallo Bea

Verwende statt ZÄHLENWENNS() eine Pivot-Tabelle.
Wir sehen uns!
... shift-del
Eine Mustertabelle hilft beim Helfen.
Excel Super-Funktionen: VERWEIS(), INDEX(), WAHL()
to top
#3
(03.05.2015, 12:13)shift-del schrieb: Hallo Bea

Verwende statt ZÄHLENWENNS() eine Pivot-Tabelle.

Hallo,

danke, geht aber nich :-(
Die Auswertungen brauche ich für den jeweiligen Stadtteil als gesonderte Mappe und das ganze für nicht Excel Nutzer.
Daher hab ich die Pivots, die nur zusätzliche Auswertungen ergeben, auch nicht dafür in Betracht gezogen.

Siehst du noch ne andere Lösung?

Ich MUSS 36 Mappen (Stadteile) anlegen die jeweils eine eigene Liste als Datenherkunft haben, anlegen.
Darin müssen verschiedenste Auswertungen stehen, die, wenn alle Gruppierungen zugeklappt sind, ausgedruckt werden müssen.
Um dann vor Ort mit eigenen zusätzlichen Bewertungen und Wichtungen ergänzt zu werden.

Aber danke auf jeden Fall fürs nachdenken.

Grüße
to top
#4
Hallo Bea

Was denn nun: 30 Blätter in einer Mappe oder 30 Mappen mit einem Blatt? Eine Quell-Liste oder 30 Quell-Listen?

Und wenn bei gruppierten Daten nur die oberste Stufe interessiert, dann kann man doch einfach die anderen Stufen weglassen und hat schon viel weniger Formeln.

Pivot-Tabellen machen keine 'zusätzlichen Auswertungen' sondern nur die die man vorgibt.

Zitat:Um dann vor Ort mit eigenen zusätzlichen Bewertungen und Wichtungen ergänzt zu werden.
Auf dem Ausdruck? Und was passiert dann?
Wir sehen uns!
... shift-del
Eine Mustertabelle hilft beim Helfen.
Excel Super-Funktionen: VERWEIS(), INDEX(), WAHL()
to top
#5
Hallo,

ich hab mal ein Auswertungsblatt angehängt. Das ist nun nicht für einen Stadtteil, aber so ungefähr mit fast der gleichen Anzahl an Kriterien brauch ich es auch für Stadtteile.
Diese sprengt schon völlig den Rahmen. Ich muss es morgen mal im Betrieb laufen lassen.
Von diesem können es bis zu 30 Blätter pro Mappe sein.
Wie du siehst (Gruppierungen) brauch ich auch die Detailauswertungen.
Zur Flächenberechnung und weiteren Wertungen.

Es gibt pro Mappe eine Quellliste. Die Inhalte lese ich mir aus einer Verwaltungssoftware aus.
Ca. einmal im Jahr müssen diese Listen dann gegen neue ausgetauscht werden.

Grüße


Angehängte Dateien
.xlsx   Mappe1.xlsx (Größe: 794,09 KB / Downloads: 7)
to top
#6
Hallo Bea

Mehr fällt mir dazu nicht ein.
Wir sehen uns!
... shift-del
Eine Mustertabelle hilft beim Helfen.
Excel Super-Funktionen: VERWEIS(), INDEX(), WAHL()
[-] Folgende(r) 1 Benutzer sagt Danke an shift-del für diesen Beitrag:
bea die erste
to top
#7
(03.05.2015, 16:16)shift-del schrieb: Hallo Bea

Mehr fällt mir dazu nicht ein.

Danke dir :-(

Schönen Restsonntag noch
to top
#8
Hallo bea,

wenn vba möglich ist, würde ich zwei Ansätze ausprobieren:
- temporäre Nutzung der Formeln, d.h. Formeln per VBA für einen bestimmten Bereich setzen und nach der Berechnung die Formeln durch Werte ersetzen.
- Datenbankabfrage auf die externen Daten per vba

Die vba-Makros könnten übrigens auch in einer anderen Excel-Datei stehen und Dein Arbeitsblatt bearbeiten und füllen.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
to top
#9
Hey,
da bin ich überfordert...aber total.
Hab mich mal an folgender Lösung versucht:

Code:
Sub Summenprodukt_überVBA()

Dim Start As Double
Dim Ende As Double
Start = Timer

Dim z As Long
Dim n As Long

Application.ScreenUpdating = False
With Worksheets("Liste")
   For z = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
       If .Cells(z - 1, 1) <> .Cells(z, 1) Then
           n = z
       End If
        .Cells(z, 9).Value = _
           Evaluate("=SUMPRODUCT((A" & n & ":A" & z & "=A" & z & ")*(F" & n & ":F" & z & "=F" & z & ")*(H" & n & ":H" & z & "))")
   Next z
End With
Application.ScreenUpdating = True

Ende = Timer
MsgBox Ende - Start & " Sekunden"

End Sub

Das ist nur ein Versuch der noch nicht angepasst ist.
Ich wollte nur schaue ob ich einen Teil der Formeln in/durch VBA ersetzen kann.
Das klappt auch. Nur so errechne ich mi eine Kombination.
Das müsste ja 87 mal gemacht werden um nur eine Zeile zu ersetzen.
Oder hab ich da ein Verständnis Problem?

In VBA bin ich blutige Anfängerin.
Daher schaffe ich das ohne Hilfe nicht.

Ich google noch mal etwas. Danke und Grüße
Bea
to top
#10
Hallo bea,

wenn die Formeln in einer Zeile relativ zueinander passen, dann reicht es, die Formel 1x für den ganzen Bereich zu setzen. Ich habe dazu mal ein Beispiel, wo ich mit Aufzeichnen begonnen habe. Im 2. Makro habe ich die ganzen Select's rausgenommen und dadurch den code auch etwas kürzer bekommen. Das Makro3 wäre dann die Umsetzung dieser Aufgabe entsprechend meinem ersten Satz hier. Die eckige Klammer bedeutet übrigens, dass die Formel relativ ist, also hier die Zeilennummer, wo die Formel eingetragen wird (R = Row) +1. Willst Du eine Zelle absolut ansprechen, dann gibst Du die Zeilen- und Spaltennummer absolut ein, also für die Zelle C2 z.B. R2C3

Code:
Sub Makro1()
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "=R[1]C"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=R[1]C"
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "=R[1]C"
    Range("C2").Select
End Sub

Sub Makro2()
    Range("A1").FormulaR1C1 = "=R[1]C"
    Range("B1").FormulaR1C1 = "=R[1]C"
    Range("C1").FormulaR1C1 = "=R[1]C"
End Sub

Sub Makro3()
    Range("A1:C1").FormulaR1C1 = "=R[1]C"
End Sub
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Performance-Problem Summenprodukt Klexx 6 89 24.11.2016, 14:24
Letzter Beitrag: Klexx
  VBA Performance Problem mikeho 7 1.109 26.01.2015, 15:11
Letzter Beitrag: atilla

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste