[Excel] gekleurde cellen tellen*

Pagina: 1
Acties:
  • 8.224 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • SmoothVision
  • Registratie: November 2004
  • Laatst online: 11-03 13:40
het volgende probleem, ik heb een excel sheet waar een x aantal cellen staan,
sommige gekleurd, de gekleurde cellen wil ik optellen en het resultaat in een cel laten weergeven, maar ik kom er maar _niet_ uit.
Heb al zeer veel gegoogled en op gathering rond gezocht, veel gevonden maar kom er toch niet uit.
Er zijn een aantal topic voorbij gevlogen in de afgelopen jaren met het zelfde probleem, zie onderaan deze post.

heb gaat om dit bestand, looplijst voor een krantenwijk, kleur geeft aan welke krant, ingevulde nummer is welk huisnr. heb wat info in de sheet gezet, let niet op de layout :)

Deze site geeft ook de benodigde informatie weer, maar heeft (mij) helaas ook niet geholpen..
Misschien moet ik het anders in VBA plakken of opslaan? ben niet he-le-maal thuis in VBA.

Zelfde heb ik rechtermuisknop op het tabblad gedaan, 'Programmacode weergeven', vba-code geplakt die Niesje gepost heeft in een ander topic (zie link hieronder)

De volkskrant heeft geen achtergrond, dus dat gaat denk ik niet werken met deze
vba code (omdat lege vakjes ook een witte achtergrond hebben, die zijn alleen niet gevuld), is daar een oplossing voor te vinden dat ik die ook (automatisch, evt. na een refresh) kan laten optellen?
hoe ik dat zou kunnen oplossen, met criteria witte achtergrond en gevuld?


Zie ook overige topics met het zelfde probleem:
[rml][ excel] Tellen adhv kleuren[/rml]
[rml][ Excel] (Gekleurde) cellen optellen[/rml]
excel cellen op kleur sorteren/optellen
[rml][ Excel] Custom formule herberekenen[/rml]

Zie ook deze reply van Niesje met de vba broncode met de oplossing (?)

Ben benieuwd of het gaat lukken!
Als jullie suggesties, of broncodes plaatsen graag volledig zodat ik het kan testen, en kan posten of het wel/niet werkt.
Overige vragen zie ik wel verschijnen, mocht het er toe doen, ik maak gebruik van Office2k3.

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

De code die je gebruikt telt de inhoud van de cellen op, en dat lijkt me niet de bedoeling. Huisnummers optellen heeft niet zoveel zin, toch? -->kleine titelfix

Om het aantal cellen te tellen zul je de regel 'totaal=totaal + c.value' waarin het totaal wordt berekend moeten wijzigen in

code:
1
totaal=totaal + 1


Als je de code in een losse module (menu invoegen, module) plaatst dan werkt het gewoon en kun je de functie somkleur() gebruiken als iedere andere werkbladformule.
SmoothVision schreef op donderdag 29 juni 2006 @ 10:03:
[knip]
Als jullie suggesties, of broncodes plaatsen graag volledig zodat ik het kan testen, en kan posten of het wel/niet werkt.
Kom op zeg. Dit meen je toch hopelijk niet? Als mensen suggesties of tips plaatsen ga je daar blij mee aan de slag en als je er echt niet uitkomt vraag je verder, maar om nu op voorhand al de verantwoording bij die ander te leggen gaat mi te ver. ;)

[ Voor 17% gewijzigd door Lustucru op 29-06-2006 11:23 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • SmoothVision
  • Registratie: November 2004
  • Laatst online: 11-03 13:40
Super, het werkt echt (bijna) perfect, hebt de vba-code in een nieuwe module geplaatst en opgeslagen.
De funtie SomKleur in de daarbij behoordende cellen geplaatst

Ik heb een testwijk aangemaakt om het te testen, alleen nu is het zo dat van de 5 kranten (kleuren) hij er 3 niet helemaal goed weergeeft.

Bij kidsweek en trouw wordt het juiste aantal aangegeven, bij de overige 3 geeft hij er 1 te weinig aan?
Waar zou dat aan kunnen liggen, heb de functie SomKleur opnieuw aangemaakt voor die cellen, en heb de kleuren ook veranderd, misschien dat het zou helpen, maar helaas.

De kleuren zijn uiteraard wel het zelfde, niet dat 1 cel een afwijkende kleur heeft waardoor hij niet door de telling wordt meegenomen :)

P.S. tijdens het opstarten refresht hij de cijfers al, en wanneer ik iets wijzig kan ik de cel met de functie SomKleur refreshen door op F9 te drukken :) ergg handig.


Trouwens, de volkskrant was erg makkelijk op te lossen, gewoon witte achtergrond gebruiken ;)
Bedankt dusver!! _/-\o_

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

code:
1
 If c.Interior.ColorIndex = kleur And IsNumeric(c.Value) Then

12A is niet echt numeric ;), maw die tweede voorwaarde mag wel weg hier. :)
edit:
moet je die then natuurlijk wel laten staan:
als {voorwaarde} dan --> if {voorwaarde} then -->
if c.interior.colorindex = kleur then

[ Voor 39% gewijzigd door Lustucru op 29-06-2006 12:37 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • SmoothVision
  • Registratie: November 2004
  • Laatst online: 11-03 13:40
Niesje schreef op donderdag 29 juni 2006 @ 11:56:
code:
1
 If c.Interior.ColorIndex = kleur And IsNumeric(c.Value) Then
12A is niet echt numeric ;), maw die tweede voorwaarde mag wel weg hier. :)
Lijkt ook heel logich :), bedankt, (edit)

Wanneer ik deze code invoer:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function SomKleur(Optelbereik As Range, referentie As Range) As Double
    Application.Volatile
    Dim totaal As Double, kleur As Long
    Dim c As Range
    
    kleur = referentie.Interior.ColorIndex
    For Each c In Optelbereik.Cells
        If c.Interior.ColorIndex = kleur Then
            totaal = totaal + 1
        End If
    Next c
    
    SomKleur = totaal
End Function
Het was inderdaad vrij simpel, de bovenste code ingevuld en het werkte perfect!
Blijkbaar moest (c.Value) ook nog weggehaald worden, had in eerste instantie alleen IsNumeric weggehaald :)

Bedankt Niesje jij hebt er weer een pluimpje bij :+ _/-\o_

[ Voor 30% gewijzigd door SmoothVision op 29-06-2006 13:05 ]


Acties:
  • 0 Henk 'm!

  • SmoothVision
  • Registratie: November 2004
  • Laatst online: 11-03 13:40
Is het volgende ook mogelijk?

in dit bestand heb ik even een voorbeeld gemaakt,
het is als volgt, algemeen dagblad en testkrant hebben dezelfde achtergrond maar testkrant heeft een randopmaak om de cel, nu geeft de SomKleur functie het aantal weer met de zelfde achtergrond.

Is het ook mogelijk dat er onderscheid gemaakt kan worden tussen een cel met bv een randopmaak (in dit voorbeeld testkrant) en een cel met alleen de achtergrond kleur (in dit voorbeeld bestand algemeen dagblad) :?

Waarom omdat het 'eindproduct' totaal ong. 10 verschillende vakjes heeft, maar sommige hebben wel de zelfde achtergrond kleur maar de een heeft dan een zwarte of een rode rand om de cel.

Acties:
  • 0 Henk 'm!

  • SmoothVision
  • Registratie: November 2004
  • Laatst online: 11-03 13:40
Weet iemand hoe ik de bovenstaande vba code kan 'uitbreiden' zodat er niet alleen naar de achtergrondkleur maar ook naar de opmaak van de cel gekeken wordt bij de telling?

Ik denk dat het een uitbreiding is bij de volgende code:
code:
1
 If c.Interior.ColorIndex = kleur Then
Waar ik eerder 'And IsNumeric(c.Value)' weg heb gehaald. Maar welke uitbreiding geldt voor de celopmaak (met name randen rondom een cel) weet ik niet.

Of als iemand mij opweg kan helpen, graag _/-\o_

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Je maakt het met randen nodeloos ingewikkeld. In jouw sheetje bv hebben veel cellen wél een rand, al zie je hem niet. Bovendien heetf iedere cel 4 randen, die je alle 4 na zou moeten lopen.
Beter 10 verschillende kleurtjes, of als het perse met iets anders moet, een arcering toepassing.
Als je met het laatste wilt stoeien kun je dmv de pattern eigenschap van het interiorobject de arcering ophalen, in een variabele stoppen en iedere cel weer vergelijken.

code:
1
2
3
4
dim patroon as long
patroon=referentie.interior.pattern
[...]
..... and c.interior.pattern=patroon then


en hoe je dat precies in de code wrot mag je even zelf uitzoeken ;)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 22:36
Ikzelf gebruik het liefst de tekstkleur als tweede "variabele". Kan je gebruiken door:
code:
1
2
3
4
dim tekstkleur as long
tekstkleur=referentie.font.colorindex
[...]
..... and c.font.colorindex=tekstkleur then
Niesje schreef op vrijdag 30 juni 2006 @ 20:42:
en hoe je dat precies in de code wrot mag je even zelf uitzoeken ;)

Acties:
  • 0 Henk 'm!

  • IJzerboot
  • Registratie: Mei 2002
  • Laatst online: 22:33
Er zijn veel topics die hetzelfde probleem beschrijven, maar in dit topic staat de goeie oplossing.
Is het mogelijk om deze oplossing in de FAQ op te nemen, zodat niet iedereen alle foute oplossingen eerst bij langs moet?
Pagina: 1