Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Excel > Excel - Ερωτήσεις / Απαντήσεις > [Συναρτήσεις] Καταμέτρηση φανερών γραμμών.

Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ.

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 07-09-11, 19:49
Όνομα: φωτης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 28-01-2011
Μηνύματα: 27
Προεπιλογή Καταμέτρηση φανερών γραμμών.

Καλησπέρα στην παρέα του 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.

Ευχαριστώ για τον χρόνο σας!
Απάντηση με παράθεση
  #2  
Παλιά 07-09-11, 20:47
Lefteris
Guest
 
Μηνύματα: n/a
Προεπιλογή

Καλησπέρα σε όλους.

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

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

Πές μας, αν έγινε
Συνημμένα Αρχεία
Τύπος Αρχείου: xls SUBTOTAL-Φώτης.xls (17,5 KB, 53 εμφανίσεις)
Απάντηση με παράθεση
  #3  
Παλιά 07-09-11, 20:51
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

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

Δοκίμασε τον παρακάτω κώδικα εκτελώντας το 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
Καλή συνέχεια!

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #4  
Παλιά 08-09-11, 21:51
Όνομα: φωτης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 28-01-2011
Μηνύματα: 27
Προεπιλογή

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

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

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

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

Σας ευχαριστώ πάντως και τους δύο για τις προτάσεις σας και τον χρόνο που διαθέσατε.
Απάντηση με παράθεση
  #5  
Παλιά 09-09-11, 13:47
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

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

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

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

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

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

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

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

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #6  
Παλιά 11-09-11, 00:34
Όνομα: φωτης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 28-01-2011
Μηνύματα: 27
Προεπιλογή

Καλησπέρα!

Σε ευχαριστώ Τάσο.
Απάντηση με παράθεση
  #7  
Παλιά 11-09-11, 17:57
Όνομα: φωτης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 28-01-2011
Μηνύματα: 27
Προεπιλογή

Καλησπέρα!

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

1 AVERAGE
2 COUNT
3 COUNTA
4 MAX
5 MIN
6 PRODUCT
7 STDEV
8 STDEVP
9 SUM
10 VAR
11 VARP
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Συναρτήσεις] Καταμέτρηση αδειων manolis Excel - Ερωτήσεις / Απαντήσεις 9 03-11-16 11:20
Καταμέτρηση επισκέψεων σε πελάτη bdim20 Access - Ερωτήσεις / Απαντήσεις 6 18-02-15 10:32
[Συναρτήσεις] Καταμέτρηση κελιών stelianta Excel - Ερωτήσεις / Απαντήσεις 8 15-01-14 18:10
[Συναρτήσεις] Καταμέτρηση τιμών ΓιάννηςΔάσκαλος Excel - Ερωτήσεις / Απαντήσεις 4 04-03-12 00:07
[Συναρτήσεις] Καταμέτρηση υπό όρους - Countif fulldeen Excel - Ερωτήσεις / Απαντήσεις 6 13-04-10 14:32


Η ώρα είναι 21:13.