Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Συναρτήσεις] Καταμέτρηση φανερών γραμμών. (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/1351-katametrisi-faneron-grammon.html)

φωτης 07-09-11 18:49

Καταμέτρηση φανερών γραμμών.
 
Καλησπέρα στην παρέα του forum!

Το πρόβλημα που αντιμετώπισα ήταν να εφαρμόσω μια συνάρτηση COUNT σε ένα φύλλο εργασίας όπου είχε εφαρμοστεί ένα φίλτρο. Έτσι πχ από τις 100 εγγραφές ήταν εμφανείς οι 50.
Εφαρμόζοντας όμως την COUNT διαπίστωσα οτι καταμετρούσε και τις 100 γραμμές (και αυτές που ήταν κρυφές).

Από αναζήτηση στο internet βρήκα αυτό τον κώδικα και ο οποίος αντιμετώπισε το πρόβλημα:


Function MyRowCount(MyRange As Range) As Integer

Dim c As Range
For Each c In MyRange
If (c.Value > 0) And (c.EntireRow.Hidden = False) Then
MyRowCount = MyRowCount + 1
End If
Next c

End Function


Ήθελα να ρωτήσω την παρέα εάν έχει να προτείνει βελτιώσεις στον κώδικα που έκανα post.

Ευχαριστώ για τον χρόνο σας!

Lefteris 07-09-11 19:47

1 Συνημμένο(α)
Καλησπέρα σε όλους.

Φώτη, μπορείς να λύσεις το πρόβλημά σου, χρησιμοποιώντας την SUBTOTAL.

Δες και το δειγματάκι που σου στέλνω.

Πές μας, αν έγινε

Tasos 07-09-11 19:51

Καλησπέρα Φώτη!

Δοκίμασε τον παρακάτω κώδικα εκτελώντας το Sub test():

Κώδικας:

Sub test()
    If ActiveSheet.AutoFilterMode Then
        MsgBox CountAutofilterVisibleLines(ActiveSheet.AutoFilter.Range)
    Else
        MsgBox "Δεν υπάρχει αυτόματο φίλτρο!"
    End If
End Sub

Function CountAutofilterVisibleLines(AutoFilterRange As Range) As Long
    CountAutofilterVisibleLines = AutoFilterRange.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
' Το -1 παραλείπεται αν η κεφαλίδα του φίλτρου περιέχει δεδομένα.
End Function

Καλή συνέχεια!

Φιλικά

Τάσος

φωτης 08-09-11 20:51

Καλησπέρα στην παρέα του forum!

Φίλε Λευτέρη, η λύση που έδωσες με την SUBTOTAL δούλεψε ρολόϊ. Το απλό είναι και καλό.
Σε ευχαριστώ!

Προσωπικά προτιμώ τις λύσεις της VBA γιατί είναι πιο "μαθηματικές" λύσεις. Ισχύουν για όλες τις περιπτώσεις και όλες τις μελλοντικές τροποποιήσεις ενός βιβλίου εργασίας.
Ευελπιστώ να μάθω κάποια στιγμή να μπορώ να δουλέψω με την VBA.

Φίλε Τάσο, δοκίμασα τον κώδικα και δουλεύει άψογα και σε ευχαριστώ για την λύση!
Υπάρχει η δυνατότητα να μετατραπεί ο κώδικας, έτσι ώστε να απαριθμεί ΜΟΝΟ τις γραμμές που έχουν στοιχεία?
π.χ. έχω ένα φύλλο με 200 εγγραφές, φιλτράρω τις 100 από αυτές και θέλω να γνωρίζω την πρόοδο ενημερωσής ενός συγκεκριμένου πεδίου κάθε φιλτραρισμένης εγγραφής. (30/100, 45/100).

Σας ευχαριστώ πάντως και τους δύο για τις προτάσεις σας και τον χρόνο που διαθέσατε.:thanks:

Tasos 09-09-11 12:47

Φώτη καλησπέρα!
Το ζητούμενο σου ήταν η καταμέτρηση των εμφανών γραμμών ενός φίλτρου.

Όχι πόσα μη κενά κελιά περιέχει μια φιλτραρισμένη στήλη (αυτό το κάνει η Subtotal() που πολύ σωστά πρότεινε ο Λευτέρης).

Αυτός ήταν και ο λόγος που σου πρότεινα λύση με VBA.

Αν θέλεις να αντικαταστήσεις την Subtotal() με VBA τότε άλλαξε τη μοναδική γραμμή στη συνάρτηση CountAutofilterVisibleLines όπως φαινεται παρακάτω:

CountAutofilterVisibleLines = WorksheetFunction.Subtotal(3, AutoFilterRange.Columns(1)) - 1

Θα πρέπει να προσαρμόσεις το "Columns(1) " με τον αριθμό που αναλογεί στη στήλη σύμφωνα με την κατάταξη της στην περιοχή του φίλτρου.

Καλή συνέχεια!

Τάσος

φωτης 10-09-11 23:34

Καλησπέρα!

Σε ευχαριστώ Τάσο.

φωτης 11-09-11 16:57

Καλησπέρα!

Σχετικά με την απάντηση του Λευτέρη να παραθέσω τον ακόλουθο πίνακα για την αντιστοιχία τιμών και συναρτήσεων της συνάρτησης SUBTOTAL.

1 AVERAGE
2 COUNT
3 COUNTA
4 MAX
5 MIN
6 PRODUCT
7 STDEV
8 STDEVP
9 SUM
10 VAR
11 VARP


Η ώρα είναι 07:05.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2