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
:
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):
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:
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.