Som op kleur - VBA-codevoorbeelden

De volgende functie berekent de totale waarde van alle cellen in een bepaald bereik met een bepaalde kleur:

Helaas is er geen SUMIF-functie om op te tellen op basis van celkleur. Als je op kleur wilt optellen, moet je een functie maken binnen VBA.
Om deze code te gebruiken: Open de Visual Basic Editor (Alt + F11), voeg een nieuwe module in (Insert > Module) en kopieer en plak de gewenste code in de module.

Functie om op te tellen op kleur

1234567891011121314151617181920 Functie Color_By_Numbers (Color_Range As Range, Color_Index As Integer) As Double'Dim Color_By_Numbers als dubbelDim Cell'Zal kijken naar cellen die zich in het bereik bevinden en of'de eigenschap kleur interieur komt overeen met de vereiste celkleur''dan zal het optellen''Loop Through-bereik'Voor elke cel in Color_RangeAls (Cell.Interior.ColorIndex = Color_Index) DanColor_By_Numbers = Color_By_Numbers + Cell.ValueStop alsVolgende celFunctie beëindigen

Dit is in feite "som per kleur" - dus als u Excel's 56 kleurenpalet kent en u weet bijvoorbeeld dat kleur 4 lichtgroen is, dan de volgende oproep:

Color_By_Numbers(“A1:P20”,4)

zal de waarden optellen voor alle cellen in het bereik A1:P20 die lichtgroen van kleur zijn.

Om het gebruik van de functie gemakkelijker te maken, berekent de volgende subroutine de totale waarde voor elk van de 56 kleuren van Excel. Het geeft ook het hele gehemelte weer, zodat het gemakkelijk is om het indexnummer voor elke kleur te zien.

De subroutine wordt aangeroepen op blad 1 en kijkt naar het bereik

12345678910111213141516171819202122 Privé Sub CommandButton1_Click()'Zal naar elke kleur kijken en samenvattende tabel met waarden produceren'op blad 1 in cel A1 en lagerDim Current_Color_Number als geheel getalDim Color_Total As DoubleVoor Current_Color_Number = 1 tot 56Color_Total = Color_By_Numbers(Sheets("Sheet2"). Range("a11:aa64"), Current_Color_Number)Werkbladen ("Blad1"). Bereik ("A1"). Offset (Huidige_Color_Number, 0) = Current_Color_NumberWerkbladen ("Blad1").Bereik ("A1").Offset(Current_Color_Number, 0).Interior.ColorIndex = Current_Color_NumberAls Color_Total 0# DanWerkbladen ("Blad1"). Bereik ("a1"). Verschuiving (Huidige_Kleur_Nummer, 1). Waarde = Kleur_TotaalStop alsVolgende Current_Color_NumberEinde sub

Klik hier om het XLS-bestand te downloaden

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave