Module Excel – VBA: Fonction pour countr les cellules colorées, si l'état est atteint

gens!

Je ne parle pas souvent de VBA dans Excel, mais quand je le fais, je trouve la réponse de Googling. Cependant, il n'y a pas de réponse à mes besoins actuels.

J'ai la fonction suivante pour countr les colors dans la gamme (source possible – http://www.ozgrid.com/VBA/sum-count-cells-by-color.htm ):

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.Color If SUM = True Then For Each rCell In rRange If rCell.Interior.Color = lCol Then vResult = WorksheetFunction.SUM(rCell) End If Next rCell Else For Each rCell In rRange If rCell.Interior.Color = lCol Then vResult = 1 + vResult End If Next rCell End If ColorFunction = vResult End Function 

J'ai essayé de l'étendre pour countr les colors dans une plage spécifique, si la condition est remplie, mais a échoué.

Je vous request, chers collègues, de m'aider à étendre la fonction pour répondre au besoin:

countz le nombre de colors dans une plage spécifique, si le mot "foo" est atteint dans une autre gamme .

Selon votre publication, vous souhaitez Count le nombre de cellules colorées, j'ai donc modifié les modifications ci-dessous pour que votre Function fonctionne comme vous l'avez posté.

StrCond est le troisième paramètre, qui est Optional pour vérifier également une certaine Ssortingng dans le rCell.Value .

 Function ColorFunction(rColor As Range, rRange As Range, Optional StrCond As Ssortingng) As Long Dim rCell As Range Dim lCol As Long Dim vResult As Long lCol = rColor.Interior.color For Each rCell In rRange If rCell.Interior.color = lCol Then If StrCond <> "" Then If rCell.Value = StrCond Then vResult = vResult + 1 End If Else vResult = vResult + 1 End If End If Next rCell ColorFunction = vResult End Function 

Tirage d'écran de la valeur de la cellule après avoir testé cette Function :

entrez la description de l'image ici

Screen-shot de la valeur de la cellule après avoir testé cette Function sans le 3ème paramètre (obtenant 5 comme prévu):

entrez la description de l'image ici

Commençons par quelque chose comme ceci:

 Option Explicit Function ColorFunction(rColor As Range, rRange As Range) As Long Dim rCell As Range Dim lCol As Long Dim bFooMet As Boolean Dim lResult As Long lCol = rColor.Interior.Color For Each rCell In rRange If rCell.Interior.Color = lCol Then lResult = lResult + 1 If rCell.value = "foo" Then bFooMet = True Next rCell If bFooMet Then ColorFunction = lResult Else ColorFunction = -1 End If End Function 

Si votre plan d'action ressemble à ceci:

entrez la description de l'image ici

et vous écrivez dans la window immédiate ?ColorFunction(cells(1,1),selection) dans la window immédiate que vous obtiendrez 11 en conséquence – le nombre de cellules en jaune, avec le même fond que A1 .

Si vous n'avez pas foo dans la gamme sélectionnée, vous obtiendrez -1 .

Si vous souhaitez countr uniquement les cellules yellow avec foo intérieur, cela pourrait être comme suit:

 Option Explicit Function ColorFunction(rColor As Range, rRange As Range) As Long Dim rCell As Range Dim lCol As Long Dim bFooMet As Boolean Dim lResult As Long lCol = rColor.Interior.Color For Each rCell In rRange If rCell.value = "foo" And rCell.Interior.Color = lCol Then lResult = lResult + 1 End If Next rCell ColorFunction = lResult End Function 

Grâce à la solution de Shai Rado , je pourrais modifier le script pour qu'il prenne deux plages: 1ère pour la cellule colorée désirée, 2ème pour le mot désiré. Le script est:

  Function ConditionalColorFunction(rColor As Range, rColoredRange As Range, StrCond As Ssortingng, rCondRange As Range) As Long Dim rColoredCell As Range Dim lCol As Long Dim i As Integer Dim iCondRangeColumnsAmount As Integer Dim vResult lCol = rColor.Interior.Color iCondRangeColumnsAmount = rCondRange.Columns.Count For Each rColoredCell In rColoredRange If rColoredCell.Interior.Color = lCol Then For i = 1 To iCondRangeColumnsAmount If Cells(rColoredCell.Row, i).Value = StrCond Then vResult = 1 + vResult Exit For End If Next End If Next rColoredCell ConditionalColorFunction = vResult End Function 

rColor – cellule avec la couleur souhaitée.

rColoredRange – gamme avec des cellules de différentes colors.

StrCond – mot désiré.

rCondRange – gamme avec des cellules avec des mots différents.