Microsoft Excel

Herbers Excel/VBA-Archiv

zählenwenn - performanceeinbruch

Betrifft: zählenwenn - performanceeinbruch von: Joe
Geschrieben am: 29.08.2004 09:02:52

Ich habe hier tägliche Excellisten mit einer variablen Anzahl (1 -10000) von Namen. Diese stehen jeweils in der Spalte B. Für 350 feststehende Namen möchte ich nun auswerten, wie oft diese täglich vorkommen... und das Ganze in Form einer Monatsübersicht.

Bislang gehe ich so vor: Tagesliste manuell in eine Monatübersicht kopieren, nun wird über die zählenwenn-Funktion diese Tabelle ausgewertet.

Name 1.1. 2.1. 3.1.
n1 zählenwenn(...)
n2
n3
.
.
.
n350

Das funktioniert, nur ist die Performance unter aller Sau sowie die Tabellengröße im 15 MB Bereich, nehme ich alle Formeln raus, so bleibt gerademal ein Bruchteil der größe übrig...

Gibts da eine bessere Lösung? Evtl. VBA? Komme dort wegen mangelnder Kenntnisse leider nicht weiter.

  


Betrifft: AW: zählenwenn - performanceeinbruch von: Leon
Geschrieben am: 29.08.2004 09:16:49

Hello Joe, se você poderia poder ser persuadido a um endereço e a um cumprimento, lá seria também uma resposta.

Leon


  


Betrifft: AW: zählenwenn - performanceeinbruch von: andre
Geschrieben am: 29.08.2004 09:20:10

Hallo Joe,
mit VBA wird's wahrscheinlich auch nicht besser, weil das Problem wahrscheinlich wo anders liegt.
Größe:
Ich nehme mal an, dass auf Deinen Tagesblättern Formeln sind, die Du dann unnötigerweise in die Monatsübersicht mitschleppst und wo sich dadurch vielleicht zusätzlich noch Bezüge zu den Tagesmappen ergeben ...
Füge mal nur die Werte in die Monatsübersicht ein.
Geschwindigkeit:
sollte nun auch schneller gehen, weil Excel das andere Zeugs nicht mehr mitberechnen muss.


  


Betrifft: AW: zählenwenn - performanceeinbruch von: Joe
Geschrieben am: 29.08.2004 09:57:36

Hallo Andre,

danke für deine Anregung! Leider rechne bzw. werte ich erst in der Monatsübersicht aus.
D. h. ich habe in dieser Arbeitsmappe mit den Registern Januar bis Dezember 12 x 350 x 20 Formeln (zählenwenn), klar, dass hier die Performance einbricht.

Ich stelle mir die Ermittlung wie folgt vor:
Cursor steht in der Monatsübersicht auf dem heutigen Tag = per VBA gelöst
Über Button/Menüeintrag die heutige Tagesliste öffnen = per VBA gelöst
Ermitteln, wie oft Name1,..., Name350 in Tagesliste = ???
Eintragen der ermittelten Werte in Monatsliste = ???

Dort, wo die Fragezeichen stehen da liegen meine Probleme! Wie realisiere ich so eine Funktion und wie kann ich das Ergebnis dann übertragen?

Beispiel
Tagesliste
N10
N8
N1
N1
N2
N10
usw.

Monatsliste

N1 | 2
N2 | 1
N3 | 0
.
.
N8 | 1
N10 | 2


  


Betrifft: AW: zählenwenn - performanceeinbruch von: andre
Geschrieben am: 29.08.2004 10:22:05

Hallo Joe,
im Prinzip so:
Blatt Namen mit Namensliste
Blatt daten mit Daten
-- wobei in dieser Zeile Sheets("Namen").Cells(i, 2) = _ auch ein anderes Blatt angegeben werden kann, z.B. Sheets("Monat").Cells(i, 2) = _

Sub Anzahl()
Dim i%
For i = 1 To 3 'mal 3 Namen in A1 bis A3
Sheets("Namen").Cells(i, 2) = _
    Application.WorksheetFunction.CountIf(Sheets("Daten").[a1:a100], Sheets("Namen").Cells(i, 1))
Next
End Sub



  


Betrifft: AW: zählenwenn - performanceeinbruch von: Joe
Geschrieben am: 29.08.2004 10:59:21

Hallo Andre,

yep, das wars! Problem ist gelöst... :-)) Hätte ich auch selbst drauf kommen können, dass Excelfunktionen auch in VBA verfügbar sind.

Vielen Dank!!

Gruß
Joe


  


Betrifft: AW: zählenwenn - performanceeinbruch von: Thomas Ramel
Geschrieben am: 29.08.2004 09:48:10

Grüezi Joe

Erstelle doch aus der Monatslisete eine Pivot-Tabelle.
Die Namenin den Zeilenbereich ziehen, das Datum in den Spaltenbereich und die Namen nochmals in den Datenbereich - die Anzahl pro Tag wird dann automatisch ermittelt.

Wenn Du den Quellbereich der Pivot-Tabelle gross genug wählst, kannst Du sie nur aktualisieren, wenn die Daten geändert haben.



Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -
[Win XP Pro SP-1 / xl2000 SP-3]