Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Excel > Excel - Ερωτήσεις / Απαντήσεις > [VBA] Μετράω πλήθος κελιών με το ίδιο background color

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 01-09-13, 19:32
Όνομα: ΜΠΑΜΠΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 13-03-2010
Μηνύματα: 9
Προεπιλογή Μετράω πλήθος κελιών με το ίδιο background color

Καλησπέρα σε όλους, Θέλω να μετράω κελιά με το ίδιο background color.
Σε ένα αρχείο excel θέλω μόνος μου να επισημαίνω με κάποιο background color μια περιοχή κελιών και να μπορεί η συνάρτηση που θα φτιάξω σε VBA να πόσα σε πλήθος κελιά έχουν το ίδιο background color. Ψάχνωντας στο google βρήκα αυτό εδώ τον κώδικα:
Κώδικας:
Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
If SUM = True Then
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = WorksheetFunction.SUM(rCell, vResult)
End If
Next rCell
Else
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = 1 + vResult
End If
Next rCell
End If
ColorFunction = vResult
End Function
. Δημιουργώ module μέσα στο αρχείο μου και επικολλώ τον παραπάνω κώδικα. Έπειτα χειροκίνητα πρασινίζω μια περιοχή κελιών που θέλω να μετρήσω το πλήθος τους και σε διπλανό κελί βάζω την παραπάνω formula,=colorfunction(A,B:C,FALSE), όπου Α το κελί που έχει το background color που με ενδιαφέρει, όπου Β:C η περιοχή κελιών που θέλω να εξετάσω και όπου FALSE δηλώνω ότι θέλω μόνο να μετρήσω πλήθος κελιών με ίδιο background color και όχι τα περιεχόμενα που μπορεί να έχουν αυτά τα κελιά, αλλά δεν παίρνω το επιθυμητό αποτέλεσμα. Αυτό που παίρνω φαίνεται στις παρακάτω συνημμένες εικόνες. Επίσης θέλω να μπορώ να χρησιμοποιώ την συνάρτηση που ορίστηκε στο module σε όλο το workbook γιατί θα δημιουργώ πολλά φύλλα εργασίας μέσα σε αυτό το βιβλίο εργασίας. Γίνεται να συμβαίνει αυτό όπως ορίστηκε η συνάρτηση ColorFunction μέσα στο module; Σε μια αναζήτηση που έκανα μέσα στο forum βρήκα το παρακάτω θέμα Άθροισμα κελιών με χρώμα,το διάβασα αλλά δεν με βοήθησε στην επίλυση του προβλήματος που έχω. Σας ευχαριστώ.
Συνημμένα Thumbnails
Μετράω πλήθος κελιών με το ίδιο background color-green-cells-d6-h6-range-result-must-5-.jpg   Μετράω πλήθος κελιών με το ίδιο background color-orange-cells-i6-l6-range-result-must-4-.jpg  
Απάντηση με παράθεση
  #2  
Παλιά 01-09-13, 19:35
Όνομα: ΜΠΑΜΠΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 13-03-2010
Μηνύματα: 9
Προεπιλογή Και το αρχείο μου σε excel που περιέχει τον κώδικα

Παράθεση:
Αρχική Δημοσίευση από it0466 Εμφάνιση μηνυμάτων
Καλησπέρα σε όλους, Θέλω να μετράω κελιά με το ίδιο background color.
Σε ένα αρχείο excel θέλω μόνος μου να επισημαίνω με κάποιο background color μια περιοχή κελιών και να μπορεί η συνάρτηση που θα φτιάξω σε VBA να πόσα σε πλήθος κελιά έχουν το ίδιο background color. Ψάχνωντας στο google βρήκα αυτό εδώ τον κώδικα:
Κώδικας:
Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
If SUM = True Then
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = WorksheetFunction.SUM(rCell, vResult)
End If
Next rCell
Else
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = 1 + vResult
End If
Next rCell
End If
ColorFunction = vResult
End Function
. Δημιουργώ module μέσα στο αρχείο μου και επικολλώ τον παραπάνω κώδικα. Έπειτα χειροκίνητα πρασινίζω μια περιοχή κελιών που θέλω να μετρήσω το πλήθος τους και σε διπλανό κελί βάζω την παραπάνω formula,=colorfunction(A,B:C,FALSE), όπου Α το κελί που έχει το background color που με ενδιαφέρει, όπου Β:C η περιοχή κελιών που θέλω να εξετάσω και όπου FALSE δηλώνω ότι θέλω μόνο να μετρήσω πλήθος κελιών με ίδιο background color και όχι τα περιεχόμενα που μπορεί να έχουν αυτά τα κελιά, αλλά δεν παίρνω το επιθυμητό αποτέλεσμα. Αυτό που παίρνω φαίνεται στις παρακάτω συνημμένες εικόνες. Επίσης θέλω να μπορώ να χρησιμοποιώ την συνάρτηση που ορίστηκε στο module σε όλο το workbook γιατί θα δημιουργώ πολλά φύλλα εργασίας μέσα σε αυτό το βιβλίο εργασίας. Γίνεται να συμβαίνει αυτό όπως ορίστηκε η συνάρτηση ColorFunction μέσα στο module; Σε μια αναζήτηση που έκανα μέσα στο forum βρήκα το παρακάτω θέμα Άθροισμα κελιών με χρώμα,το διάβασα αλλά δεν με βοήθησε στην επίλυση του προβλήματος που έχω. Σας ευχαριστώ.

Σας επισυνάπτω και το αρχείο excel που προσπαθώ αν το πετύχω.
Συνημμένα Αρχεία
Τύπος Αρχείου: xls Dokimibackgroundcolor.xls (22,5 KB, 44 εμφανίσεις)
Απάντηση με παράθεση
  #3  
Παλιά 01-09-13, 20:34
Το avatar του χρήστη Spirosgr
Συντονιστής
Όνομα: Σπύρος Τσιλιγιάννης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010, Ms-Office 2013, Ms-Office 2016, Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 22-11-2011
Περιοχή: Αθήνα
Μηνύματα: 2.321
Προεπιλογή

Καλησπέρα
Μπάμπη δεν μπορώ να δω καλά τις εικόνες (γιατί έχουν μικρό μέγεθος) και να καταλάβω τι γράφει το μήνυμα αλλά δοκίμασα την συνάρτηση και δουλεύει κανονικά σε οποιοδήποτε φύλλο ενός βιβλίου και με οποιοδήποτε χρώμα αλλά και με τα περιεχόμενα.
Αν δεν έχω καταλάβει κάτι επαναδιατύπωσε το ερώτημα σου γιατί εμένα μου φαίνονται όλα καλά.
Η συνάρτηση υπάρχει στο User Defined και χρησιμοποιείται παντού.
Αλλά μπορείς να την βάλεις και σε ένα βιβλίο μονόφυλλο με μορφή .xlam
και να την αποθηκεύσεις ως Add-In στον φάκελο
C:\Users\.........\AppData\Roaming\Microsoft\AddIn s
αν είναι Αγγλική ή
C:\Users\............\AppData\Roaming\Microsoft\Π ρόσθετα
αν είναι Ελληνική η γλώσσα του Office
Απάντηση με παράθεση
  #4  
Παλιά 01-09-13, 21:03
Όνομα: ΜΠΑΜΠΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 13-03-2010
Μηνύματα: 9
Προεπιλογή

Εμένα με ενδιαφέρει να δουλεύει με χρώμα, τα περιεχόμενα δεν με απασχολούν.
Το μήνυμα σφάλματος που μου βγάζει όταν βάζω την formula =CountFontColor(D6,D6:H6,FALSE) είναι το εξής:
O τύπος που πληκτρολογήσατε περιέχει ένα σφάλμα.
- Για πληροφορίες σχετικά με τη διόρθωση συνηθισμένων σφαλμάτων σε τύπους, κάντε κλικ στο κουμπί "Βοήθεια".
- Για βοήθεια σχετικά με την εισαγωγή ενός τύπου, κάντε κλικ στο κουμπί "ΟΚ" και στη συνέχεια από το μενού "Εισαγωγή" επιλέξτε την εντολή "Συνάρτηση".
- Εάν δεν θέλετε να εισαγάγετε έναν τύπο, αποφύγετε τη χρήση των συμβόλων ίσον (=) και πλην (-) ή πληκτρολογήστε πριν από αυτά τα σύμβολα μία απόστροφο(').

Κάτι κάνω λάθος στην πληκτρολόγηση; Δεν μπορώ να καταλάβω τι φταίει αφού η συνάρτηση μου λες ότι κάνει αυτό που θέλω, το πρόβλημα είναι ότι δεν την χρησιμοποιώ σωστά μέσα στο κελί.

Μπορείς να μου ανεβάσεις ξανά το αρχείο excel, βάζοντας σωστά την formula;
Απάντηση με παράθεση
  #5  
Παλιά 01-09-13, 21:31
Όνομα: ΜΠΑΜΠΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 13-03-2010
Μηνύματα: 9
Προεπιλογή

Σπύρο, όντως έβαζα λάθος την formula. Όντως δουλεύει όπως λες. Κάτι ακόμα.
Αυτό που δεν κάνει αυτή η συνάρτηση είναι recalculate. Όντως υπολογίζει σωστά το πλήθος των κελιών που έχουν κάποιο background χρώμα. Αν ο χρήστης όμως αποφασίσει μέσα στην περιοχή κελιών που μετρά η συνάρτηση να πειράξει το χρώμα ενός κελιού και να το αλλάξει δεν κάνει επαναυπολογισμό έτσι ώστε να μετρήσει το νέο και σωστό πλήθος των κελιών που έχουν το ίδιο background χρώμα. Πως μπορώ να το πετύχω αυτό;
Απάντηση με παράθεση
  #6  
Παλιά 01-09-13, 21:45
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Καλησπέρα!
Μπάμπη, επειδή η συνάρτηση (που κατά τα άλλα λειτουργεί) έχει κάποια λαθάκια και επειδή σε ενδιαφέρει μόνο το πλήθος των κελιών,
θα σου πρότεινα την παρακάτω συνάρτηση:
Κώδικας:
Option Explicit

Function ColoredCellsCount(ColoredCell As Range, RangeToCount As Range)
    Dim c As Range, lColor As Long, tmpCount As Long
    lColor = ColoredCell.Interior.Color
    For Each c In RangeToCount
        If c.Interior.Color = lColor Then
            tmpCount = tmpCount + 1
        End If
    Next
    ColoredCellsCount = tmpCount
End Function
Ο τύπος που χρησιμοποιείται στο φύλλο είναι: =ColoredCellsCount(D6;D6:H6)+(NOW()*0)

Επειδή δεν προκαλείται υπολογισμός όταν χρωματίζεται ένα κελί από το χρήστη, η καλύτερη λύση
είναι να προστεθεί το +(NOW()*0) στον τύπο το οποίο προκαλεί τον υπολογισμό της
συνάρτησης κάθε φορά που υπολογίζεται το βιβλίο. Θα λειτουργήσει και όταν πατηθεί το πλήκτρο F9.

Με εκτίμηση

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 01-09-13 στις 21:56.
Απάντηση με παράθεση
  #7  
Παλιά 01-09-13, 21:46
Όνομα: ΜΠΑΜΠΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 13-03-2010
Μηνύματα: 9
Προεπιλογή

Υπάρχει η λύση F2 και Enter μέσα στο κελί που υπάρχει η formula αλλά δεν είναι καθόλου αποδοτικό αυτό.
Απάντηση με παράθεση
  #8  
Παλιά 01-09-13, 21:52
Όνομα: ΜΠΑΜΠΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 13-03-2010
Μηνύματα: 9
Προεπιλογή

Ευχαριστώ Τάσο για την πολύτιμη βοήθειά σου.
Απάντηση με παράθεση
  #9  
Παλιά 02-09-13, 09:41
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Καλημέρα!
Να είσαι καλά Μπάμπη.

Μια λύση στο ζητούμενο σου είναι η δημιουργία μιας φόρμας με "χρωματισμένα" κουμπιά που με το πάτημα τους θα χρωματίζονται τα επιλεγμένα κελιά και θα προκαλείται επίσης υπολογισμός του φύλλου ώστε η συνάρτηση να εμφανίσει ακριβή αποτελέσματα.

Επισυνάπτω σχετικό παράδειγμα.

Αφού ανοίξεις το αρχείο πάτησε CTRL+ Q για να εμφανιστεί η φόρμα με τα χρώματα.


Η φόρμα μπορεί να παραμείνει ανοιχτή και παράλληλα να δουλεύεις πάνω στο βιβλίο εργασίας.

Το πρώτο κουμπί της φόρμας αφαιρεί το χρώμα από τα επιλεγμένα κελιά.

Για να αλλάξεις τα χρώματα των κουμπιών:

Πάτησε το κουμπί με το εικονίδιο (κουμπί εναλλαγής - το τελευταίο στη δεύτερης σειρά).

Επίλεξε ένα κελί που θα έχει το επιθυμητό χρώμα.

Πάτησε το κουμπί για να αλλάξεις το χρώμα του.

Αφού τελειώσεις τη διαδικασία αυτή πάτησε πάλι το κουμπί εναλλαγής και αποθήκευσε το αρχείο.

Τα χρώματα αποθηκεύονται σε κελιά στο κρυφό φύλλο "Saved_Colors" και εφαρμόζονται στα κουμπιά κατά τη φόρτωση της φόρμας.

Με εκτίμηση

Τάσος
Συνημμένα Αρχεία
Τύπος Αρχείου: xls BackgroundColor.xls (69,5 KB, 93 εμφανίσεις)
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 02-09-13 στις 09:56.
Απάντηση με παράθεση
  #10  
Παλιά 29-11-14, 17:39
Όνομα: ΒΕΝ
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 29-10-2010
Μηνύματα: 16
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από Spirosgr Εμφάνιση μηνυμάτων
Καλησπέρα
Μπάμπη δεν μπορώ να δω καλά τις εικόνες (γιατί έχουν μικρό μέγεθος) και να καταλάβω τι γράφει το μήνυμα αλλά δοκίμασα την συνάρτηση και δουλεύει κανονικά σε οποιοδήποτε φύλλο ενός βιβλίου και με οποιοδήποτε χρώμα αλλά και με τα περιεχόμενα.
Αν δεν έχω καταλάβει κάτι επαναδιατύπωσε το ερώτημα σου γιατί εμένα μου φαίνονται όλα καλά.
Η συνάρτηση υπάρχει στο User Defined και χρησιμοποιείται παντού.
Αλλά μπορείς να την βάλεις και σε ένα βιβλίο μονόφυλλο με μορφή .xlam
και να την αποθηκεύσεις ως Add-In στον φάκελο
C:\Users\.........\AppData\Roaming\Microsoft\AddIn s
αν είναι Αγγλική ή
C:\Users\............\AppData\Roaming\Microsoft\Π ρόσθετα
αν είναι Ελληνική η γλώσσα του Office
Σπύρο καλησπέρα,
Επειδή μ'ενδιαφέρει κι εμένα αυτή η συνάρτηση του Μπάμπη - να μετράω δηλ. πόσα έγχρωμα κελιά υπάρχουν - είπες οτι υπάρχει στο User Defined και χρησιμοποιείται. Που μπορεώ να την βρώ..??? Στην λίστα των συναρτήσεων - πατόντας το If - δεν την εμφανίζει... μπορεις να βοηθήσεις...??

Ευχαριστώ...
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[ Ερωτήματα ] Πλήθος ενός χαρακτήρα ggreg75 Access - Ερωτήσεις / Απαντήσεις 3 29-06-15 14:11
[VBA] ComboBox Πλήθος Εκτυπώσεων gfevran Excel - Ερωτήσεις / Απαντήσεις 2 09-11-14 22:13
[ Πίνακες ] ΠΛΗΘΟΣ ΕΓΓΡΑΦΩΝ gaz_manos Access - Ερωτήσεις / Απαντήσεις 7 12-06-14 19:57
[ Πίνακες ] Πλήθος Εγγραφών σε πίνακα. Free_Ghost Access - Ερωτήσεις / Απαντήσεις 2 08-02-10 10:21


Η ώρα είναι 16:03.