Avatar billede nof Nybegynder
28. december 2008 - 15:43 Der er 11 kommentarer

Funktion der udregner average på baggrund af cellefarver

Hej,

Jeg har et regneark, hvor jeg har defineret nogle værdier med en række celle baggrundsfarver.

Findes der en funktion der kan udregne average af disse værdier, men som kun udregner resultatet af f.eks. de grønne og røde celler, mens den ser bort fra de blå felter?
Avatar billede jkrons Professor
28. december 2008 - 16:28 #1
En sådan funktion findes ikke i Excel, men læg denne kode i et modul og brug den som en almindelig funktion:

Function AveColor(Cel, ran As Range) As Double
    Application.Volatile
    colo = Cel.Interior.ColorIndex
    cou = 0
    For Each c In ran.Cells
        If c.Interior.ColorIndex = colo Then
            cou = cou + 1
        End If
    Next c
   
    colsum = 0
    For Each c In ran.Cells
        If c.Interior.ColorIndex = colo Then
            colsum = colsum + c.Value
        End If
    Next c
    AveColor = colsum / cou
End Function

Når du skal bruge denm, skirve du =AveColor(A1;A1:A10), hvor A1 er en celle, der har den farve, som du vil finde gennemsnittet af, og A1:A10 er det område, du vil beregne på, hvis farven er rigtig.

Husk at denne type funktioner, genberegnes kun, når der i øvrigt genberegnes i regnearket. Skifter du farve på en celle, ændres resultatet ikke, før der foretages en genberegning.
Avatar billede nof Nybegynder
28. december 2008 - 17:18 #2
hvordan lægger man den ind i et modul?
Avatar billede jkrons Professor
28. december 2008 - 17:27 #3
Vælg Funktioner - Makro - Visual Basic Editor. Klik så på Insert og vælg Module. Kopier koden til dette modul.
Avatar billede kabbak Professor
28. december 2008 - 17:33 #4
jkrons > du kan nøjes med et loop


Function AveColor(Cel, ran As Range) As Double
    Application.Volatile
    colo = Cel.Interior.ColorIndex
    cou = 0
    colsum = 0
    For Each c In ran.Cells
        If c.Interior.ColorIndex = colo Then
            cou = cou + 1
            colsum = colsum + c.Value
        End If
    Next c
    AveColor = colsum / cou
End Function
Avatar billede excelent Ekspert
28. december 2008 - 17:41 #5
husk lige det var 2 farver han ville beregne
og så kan vi jo håbe på det ikke er betinget farver :-)
Avatar billede jkrons Professor
28. december 2008 - 17:49 #6
Hvis der er to farver, kan man regne hver af dem for sig .-), men det bliver godt nmok lidt mere besværligt.
Avatar billede excelent Ekspert
28. december 2008 - 18:10 #7
det kan du nemt indbygge i funktionen jkrons :-)
Avatar billede jkrons Professor
29. december 2008 - 11:10 #8
kabbak-> Det kan jeg godt, men jeg løste i første omgang problemet ved at sammelægge to funktioner, jeg allerede havde :-)
Avatar billede jkrons Professor
29. december 2008 - 11:15 #9
En løsning, hvor det er to forskellige farver:

Function AveColor(Cel, cel2, ran As Range) As Double
    Application.Volatile
    colo = Cel.Interior.ColorIndex
    colo2 = cel2.Interior.ColorIndex
    cou = 0
    colsum = 0
    For Each c In ran.Cells
        If c.Interior.ColorIndex = colo Or c.Interior.ColorIndex = colo2 Then
            cou = cou + 1
            colsum = colsum + c.Value
        End If
    Next c
    AveColor = colsum / cou
End Function

Begge farver SKAKL anvendes, fx

AVECOLR(A1;A2;A!:A10), hvor A1 og A2 indeholder farverne.
Avatar billede jkrons Professor
29. december 2008 - 11:16 #10
AVECOLOR(A1;A2;A!:A10) naturligvis.
Avatar billede jkrons Professor
29. december 2008 - 11:22 #11
Her en variant, hvor farve to er valgfri:

Function AveColor(Cel, ran As Range, Optional Cel2 As Variant) As Double
    Application.Volatile
    If Not IsMissing(Cel2) Then
    colo2 = Cel2.Interior.ColorIndex
    End If
    colo = Cel.Interior.ColorIndex
   
    cou = 0
    colsum = 0
    For Each c In ran.Cells
        If c.Interior.ColorIndex = colo Or c.Interior.ColorIndex = colo2 Then
            cou = cou + 1
            colsum = colsum + c.Value
        End If
    Next c
    AveColor = colsum / cou
End Function

Nu skal funktionen bruges sådan =AVECOLOR(A1;A1:A10;A2). Det sidste argument skal indeholde farve 2, men kan udelades, hvis der kun skal regnes på en enkelt celle.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester