Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
992to996
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
992to996
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Ergebnisse einer VBA IF Pruefung zählen
09.07.2008 17:05:08
Andreas
Hallo Herber Fans,
ein Problem habe ich heute schon lösen können, aber nun hänge ich wieder. Vermutlich eine Banalität für die Profis unter Euch. Ich kann mir aber leider keinen Reim darauf machen…
Mit folgendem Code:

Sub ZeilenFeldItemsTest_3()
Dim pvTable As PivotTable
Dim pvField As PivotField
Set pvTable = ActiveSheet.PivotTables(1)
If pvField.DataRange.Value  "(Alle)" Then
MsgBox "Status:  Alle", , pvField.Name
Else
MsgBox "Stauts: Alle", , pvField.Name
End If
End Sub


Prüfe ich alle Pivotfelder im PageRange, ob „ALLE“ gewählt sind. Das funktioniert. Nun möchte ich aber die Ergebnisse zählen, d.h. wenn zwei von drei Feldern im PageFields nicht auf „Alle“ stehen, dann soll das am Ende des Makros in einer Messagebox kommen. MsgBox „es sind“ & ERGEBNIS der IF Pruefung & „Seitenfelder nicht im Status ‚Alle’“.
Also eine Art CountIf mit einem Range, der nicht Zellbezüge sind, sondern die Gesamtheit dieser IF Prüfung. An eine Collection habe ich gedacht, nur weiß ich nicht, wie ich die Summe der Werte in einer collection bilde. WorksheetFunction.Sum(Test_collection) mit Dim Test_collection as New Collection hat nicht funktioniert.
Wie zählt man die Ergebnisse einer IF Prüfung am besten?! Collection? Function?
Vielen Dank für Eure Ideen und Anregungen.
Liebe Grüße, Andreas

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ergebnisse einer VBA IF Pruefung zählen
09.07.2008 18:07:31
fcs
Hallo Andreas (man nannte ihn auch den Pivot-Optimierer),
wenn du die If-Prüfungen in einer Schleife machst, dann kannst du auch einen Zähler mitlaufen lassen und in der jeweiligen Bedingung um 1 erhöhen.

iCount=0
For i = 1 to X
if Bedingung=True then
iCount = iCount+1
else
end if
Next
MsgBox "Von " & X & " Werten erfüllten " & iCount & " die Bedingung"


Für eine Pivot-Tabelle kannst du die Seitenfelder auch wie folgt auf (Alle) auswerten:


Sub ZeilenFeldItemsTest_3()
Dim pvTable As PivotTable
Dim intAlle As Integer
Set pvTable = ActiveSheet.PivotTables(1)
With pvTable
If .PageFields.Count = 0 Then
MsgBox "Keine Seitenfelder vorhanden"
Else
'Anzahl Seitenfelder mit Wert "(Alle)"
intAlle = Application.WorksheetFunction.CountIf(.PageRangeCells.Columns(2), "(Alle)")
MsgBox "Von " & .PageFields.Count & " Seitenfeldern sind " _
& intAlle & " auf ""(Alle)"" gesetzt."
End If
End With
End Sub

Gruß
Franz

Anzeige
AW: Ergebnisse einer VBA IF Pruefung zählen
10.07.2008 15:58:00
Andreas
Hallo Franz,
na da habe ich gerade ja herzlich zum Ende dieses Tages lachen können: „(man nannte ihn auch den Pivot-Optimierer)“…
Ja ja, die Pivottabellen haben es mir doch schon sehr angetan und ich werde auch nicht eher ruhen, bis ich alle meine Ideen umgesetzt habe. Es ist so faszinierend, wie logisch VBA sein kann. Und wie von Zauberhand Felder sortiert oder auf TopN Filter gesetzt werden, sie überwacht werden, die Position, die Fensterfixierung angepaßt wird… ja, das erfüllt mich mit Freude.
Und in Sachen Optimierung bin ich nur so weit, weil Du mir durch Deine guten Codes und Hinweise beweist, daß es möglich ist. Dadurch lerne ich und habe Deine Codes immer besser verstanden und konnte so gelerntes in neue Codes einfließen lassen.
An dieser Stelle dafür ein großes Danke!
Ich habe Deine Codes ausprobiert. Sie funktionieren. Herrlich stringent und logisch. Ich hatte auch schon daran gedacht, einen intStatus zu vergeben, aber der hätte nicht die Anzahl ermitteln können. Auf den mitlaufenden „+1“ Counter bin ich gestern nicht gekommen… Aber so richtig gut fand ich die Methode über PageRangeCells und dann die Column für den Range des CountIf zu indizieren. Das ist genial!
Was ich nun noch für ein (Folge-) Problem habe:
Ich lasse durch Deinen Code mit dem CountIf prüfen, ob alle Felder auf „Alle“ stehen. Wenn das der Fall ist, dann möchte ich immer das erste PivotItem, des ersten Feldes in PageFields wählen. Hintergrund: Einige Makros für Formatierung einer Pivot, Sortieren, etc. laufen schneller, wenn der PageRange wenigstens irgendwie eingegrenzt ist. Das ist eine Vermutung und ich bin noch am Testen.
Mein Problem ist nun, daß das für diese Logik notwendige Feld immer „das Oberste“ der PageFields sein soll. Dieses ist aber nicht immer „das erste“ (1), denn diese Eigenschaft richtet sich nach der Reihenfolge, mit der die Felder in den PageRange gekommen sind. Wie kann ich allso feststellen, welches Feld das Oberste ist. Egal wann es rein gekommen ist und welche Felder unter/ über ihm postiert wurden?!
Der Code:

Sub Pivot_PageRange_erstesFeldaufErstesItemSetzen()
Dim pvTable As PivotTable
Dim pvField As PivotField
Set pvTable = ActiveSheet.PivotTables(1)
'# # # TESTBEREICH
Debug.Print pvTable.PageFields(1).DataRange.Value
Debug.Print pvTable.PageFields(1).PivotItems.Count
Debug.Print pvTable.PageFields(1).PivotItems(1).Value
'# # # TESTBEREICH
If pvTable.PageFields.Count = 0 Then
MsgBox "Keine Seitenfelder vorhanden"
Else
pvTable.PageFields(1).CurrentPage = pvTable.PageFields(1).PivotItems(1).Value
End If
End Sub


Vielen Dank für eine Idee Deinerseits.
Grüße, Andreas

Anzeige
AW: Ergebnisse einer VBA IF Pruefung zählen
11.07.2008 14:38:01
fcs
Hallo Andreas,
den Namen des 1. Seitenfeldes kannst du aus der 1. Zelle des PageRange-Bereichs auslesen und über den Namen dann die Auswahl auf das 1. Item setzen.
Gruß
Franz

Sub Pivot_PageRange_erstesFeldaufErstesItemSetzen()
Dim pvTable As PivotTable
Dim pvField As PivotField
Set pvTable = ActiveSheet.PivotTables(1)
If pvTable.PageFields.Count = 0 Then
MsgBox "Keine Seitenfelder vorhanden"
Else
'1. Seitenfeld auf 1. Element setzen
With pvTable
With .PageFields(.PageRange.Range("A1").Value)
.CurrentPage = .PivotItems(1).Value
End With
End With
End If
End Sub


Anzeige
AW: Ergebnisse einer VBA IF Pruefung zählen
16.07.2008 20:02:00
Andreas
Hallo Franz,
vielen Dank! Funktioniert sehr gut. Wieder etwas gelernt....
Dank und Gruß,
Andreas

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige