Αυτό το σεμινάριο θα δείξει πώς να χρησιμοποιήσετε το Φίλτρο Συγκεντρωτικού Πίνακα σε VBA.
Οι περιστρεφόμενοι πίνακες είναι ένα εξαιρετικά ισχυρό εργαλείο δεδομένων του Excel. Οι περιστρεφόμενοι πίνακες μας δίνουν τη δυνατότητα να αναλύσουμε και να ερμηνεύσουμε μεγάλες ποσότητες δεδομένων ομαδοποιώντας και συνοψίζοντας πεδία και σειρές. Μπορούμε να εφαρμόσουμε φίλτρα στους περιστροφικούς πίνακες για να μπορέσουμε να δούμε γρήγορα τα δεδομένα που σχετίζονται με εμάς.
Πρώτον, πρέπει να δημιουργήσουμε έναν Συγκεντρωτικό πίνακα για τα δεδομένα μας. (Κάντε κλικ εδώ για τον Οδηγό περιστροφικού πίνακα VBA).
Δημιουργία φίλτρου με βάση την τιμή κελιού
Μπορείτε να φιλτράρετε σε έναν Συγκεντρωτικό Πίνακα χρησιμοποιώντας VBA βάσει δεδομένων που περιέχονται σε μια τιμή κελιού - μπορούμε είτε να φιλτράρουμε στο πεδίο Σελίδα είτε σε πεδίο Σειρά (για παράδειγμα στο πεδίο Προμηθευτής παραπάνω ή στο Πεμπτό πεδίο που βρίσκεται στη στήλη Ετικέτες γραμμής ).
Σε ένα κενό κελί στα δεξιά του Συγκεντρωτικού πίνακα, δημιουργήστε ένα κελί για να συγκρατήσετε το φίλτρο και, στη συνέχεια, πληκτρολογήστε τα δεδομένα στο κελί στο οποίο θέλετε να φιλτράρετε τον Συγκεντρωτικό πίνακα.
Δημιουργήστε την ακόλουθη μακροεντολή VBA:
1234567 | Sub FilterPageValue ()Dim pvFld As PivotFieldDim strFilter As StringΟρισμός pvFld = ActiveSheet.PivotTables ("Συγκεντρωτικός Πίνακας1"). Συγκεντρωτικά πεδία ("Προμηθευτής")strFilter = ActiveWorkbook.Sheets ("Sheet1"). Range ("M4"). ΤιμήpvFld.CurrentPage = strFilterΤέλος υπο |
Εκτελέστε τη μακροεντολή για να εφαρμόσετε το φίλτρο.
Για να καθαρίσετε το φίλτρο, δημιουργήστε την ακόλουθη μακροεντολή:
12345 | Sub ClearFilter ()Dim pTbl Ως Συγκεντρωτικός ΠίνακαςΟρισμός pTbl = ActiveSheet.PivotTables ("Συγκεντρωτικός Πίνακας1")pTbl.ClearAllFiltersΤέλος υπο |
Το φίλτρο θα αφαιρεθεί.
Στη συνέχεια, μπορούμε να τροποποιήσουμε τα κριτήρια φίλτρου για φιλτράρισμα σε μια γραμμή στον Συγκεντρωτικό πίνακα και όχι στην Τρέχουσα σελίδα.
Η πληκτρολόγηση της ακόλουθης μακροεντολής θα μας επιτρέψει στη συνέχεια να φιλτράρουμε στη γραμμή (σημειώστε ότι το Συγκεντρωτικό πεδίο για φιλτράρισμα είναι πλέον το Oper και όχι ο Προμηθευτής).
1234567 | Sub FilterRowValue ()Dim pvFld As PivotFieldDim strFilter As StringΟρισμός pvFld = ActiveSheet.PivotTables ("Συγκεντρωτικός Πίνακας1"). Συγκεντρωτικά πεδία ("Άνοιγμα")strFilter = ActiveWorkbook.Sheets ("Sheet1"). Range ("M4"). ΤιμήpvFld.PivotFilters.Add2 xlCaptionEquals,, strFilterΤέλος υπο |
Εκτελέστε τη μακροεντολή για να εφαρμόσετε το φίλτρο.
Χρήση πολλαπλών κριτηρίων σε ένα περιστρεφόμενο φίλτρο
Μπορούμε να προσθέσουμε στο φίλτρο τιμής σειρά παραπάνω, προσθέτοντας επιπλέον κριτήρια.
Ωστόσο, καθώς το τυπικό φίλτρο αποκρύπτει τις γραμμές που δεν απαιτούνται, πρέπει να περιηγηθούμε στα κριτήρια και να δείξουμε αυτά που απαιτούνται, ενώ κρύβουμε εκείνα που δεν απαιτούνται. Αυτό γίνεται δημιουργώντας μια μεταβλητή Array και χρησιμοποιώντας δύο βρόχους στον κώδικα.
1234567891011121314151617181920212223 | Sub FilterMultipleRowItems ()Dim vArray As VariantDim i Ως ακέραιος, j Ως ακέραιοςDim pvFld As PivotFieldΟρισμός pvFld = ActiveSheet.PivotTables ("Συγκεντρωτικός Πίνακας1"). Συγκεντρωτικά πεδία ("Άνοιγμα")vArray = Εύρος ("M4: M5")pvFld.ClearAllFiltersΜε pvFldΓια i = 1 Προς pvFld.PivotItems.Countj = 1Do while j <= UBound (vArray, 1) - LBound (vArray, 1) + 1Εάν pvFld.PivotItems (i) .Name = vArray (j, 1) ΤότεpvFld.PivotItems (pvFld.PivotItems (i) .Name). Visible = TrueΈξοδος DoΑλλούpvFld.PivotItems (pvFld.PivotItems (i). Name). Visible = FalseΤέλος εανj = j + 1ΒρόχοςΕπόμενο iΤέλος μεΤέλος υπο |
Δημιουργία φίλτρου με βάση μια μεταβλητή
Μπορούμε να χρησιμοποιήσουμε τις ίδιες έννοιες για να δημιουργήσουμε φίλτρα που βασίζονται σε μεταβλητές στον κώδικά μας και όχι στην τιμή σε ένα κελί. Αυτή τη φορά, η μεταβλητή φίλτρου (strFilter) συμπληρώνεται στον ίδιο τον κώδικα (π.χ.: Σκληρός κωδικοποιημένος στη μακροεντολή).
1234567 | Sub FilterTextValue ()Dim pvFld As PivotFieldDim strFilter As StringΟρισμός pvFld = ActiveSheet.PivotTables ("Συγκεντρωτικός Πίνακας1"). Συγκεντρωτικά πεδία ("Προμηθευτής")strFilter = "THOMAS S"pvFld.CurrentPage = strFilterΤέλος υπο |