Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] Μετράω πλήθος κελιών με το ίδιο background color (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/2668-metrao-plithos-kelion-me-idio-background-color.html)

it0466 01-09-13 19:32

Μετράω πλήθος κελιών με το ίδιο background color
 
2 Συνημμένο(α)
Καλησπέρα σε όλους, Θέλω να μετράω κελιά με το ίδιο 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 βρήκα το παρακάτω θέμα Άθροισμα κελιών με χρώμα,το διάβασα αλλά δεν με βοήθησε στην επίλυση του προβλήματος που έχω. Σας ευχαριστώ.

it0466 01-09-13 19:35

Και το αρχείο μου σε excel που περιέχει τον κώδικα
 
1 Συνημμένο(α)
Παράθεση:

Αρχική Δημοσίευση από it0466 (Μήνυμα 15520)
Καλησπέρα σε όλους, Θέλω να μετράω κελιά με το ίδιο 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 που προσπαθώ αν το πετύχω.

Spirosgr 01-09-13 20:34

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

it0466 01-09-13 21:03

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

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

Μπορείς να μου ανεβάσεις ξανά το αρχείο excel, βάζοντας σωστά την formula;

it0466 01-09-13 21:31

Σπύρο, όντως έβαζα λάθος την formula. Όντως δουλεύει όπως λες. Κάτι ακόμα.
Αυτό που δεν κάνει αυτή η συνάρτηση είναι recalculate. Όντως υπολογίζει σωστά το πλήθος των κελιών που έχουν κάποιο background χρώμα. Αν ο χρήστης όμως αποφασίσει μέσα στην περιοχή κελιών που μετρά η συνάρτηση να πειράξει το χρώμα ενός κελιού και να το αλλάξει δεν κάνει επαναυπολογισμό έτσι ώστε να μετρήσει το νέο και σωστό πλήθος των κελιών που έχουν το ίδιο background χρώμα. Πως μπορώ να το πετύχω αυτό;

Tasos 01-09-13 21:45

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

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.

Με εκτίμηση

Τάσος

it0466 01-09-13 21:46

Υπάρχει η λύση F2 και Enter μέσα στο κελί που υπάρχει η formula αλλά δεν είναι καθόλου αποδοτικό αυτό.

it0466 01-09-13 21:52

Ευχαριστώ Τάσο για την πολύτιμη βοήθειά σου.

Tasos 02-09-13 09:41

1 Συνημμένο(α)
Καλημέρα!
Να είσαι καλά Μπάμπη.

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

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

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


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

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

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

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

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

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

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

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

Με εκτίμηση

Τάσος

VOGAS 29-11-14 17:39

Παράθεση:

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

Σπύρο καλησπέρα,
Επειδή μ'ενδιαφέρει κι εμένα αυτή η συνάρτηση του Μπάμπη - να μετράω δηλ. πόσα έγχρωμα κελιά υπάρχουν - είπες οτι υπάρχει στο User Defined και χρησιμοποιείται. Που μπορεώ να την βρώ..??? Στην λίστα των συναρτήσεων - πατόντας το If - δεν την εμφανίζει... μπορεις να βοηθήσεις...??

Ευχαριστώ...


Η ώρα είναι 14:34.

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


Search Engine Optimization by vBSEO 3.3.2