Criar função contar celulas coloridas e devolver quantidade dessas celulas e ... - Visual Basic for Applications (VBA) - Portugal-a-Programar
Criar função contar celulas coloridas e devolver quantidade dessas celulas e ...
By susanajm, December 17, 2009 in Visual Basic for Applications (VBA)
susanajm 0
Gostaria de saber se alguém me consegue ajudar aqui com uma função.
Queria criar uma função que contasse as células coloridas ou texto colorido de uma determinada lista, e depois devolvesse a quantidade dessas células com uma determinada cor da célula ou do texto, e ao mesmo tempo também devolvesse o conteúdo dessas determinadas células.
Já tenho uma função me dá a quantidade de células coloridas, só falta a parte da função devolver o conteúdo das células em questão.
'  (deverá ser inserido a área e o código da cor)
Confesso que nem olhei para o teu código...
Fui apenas a um ficheiro que já tinha guardado com link para esse código...
http://vbtuga.blogspot.com/2008/04/excel-contar-cores-das-clula.html
Tenho também estes e aqui deixo:
http://vbtuga.blogspot.com/2008/03/formatao-condicional-expandida-em-excel.html
Tens várias soluções possiveis. Um forma agradável e simples será usar ou um vector ou uma collection. O vector é como em qualquer outra linguagem. As collections funcionam de forma parecida a uma arraylist em .NET mas muito mais básico. Ambas as formas permitem-te ficar a saber não só o que lá estava escrito, mas contar e até saber em que parte da contagem está cada uma.
Irei dar o exemplo com uma collection, pois acho que se torna mais simples e natural:
Public Function CountColors(rng As Range, color As Integer) As Collection
' Adiciona novo valor à colecção
x.Add (rg.Value)
set CountColors = x
Como podes ver eu passo a collection toda. Porquê? Bem porque o numero de valores adicionados dá-me a quantidade e a collection até tem um método para isso. x.count. Ou se usares noutra parte do código basta chamares a tua função CountColors.count (se calhar ficava melhor com outro nome que assim fica esquisito B))
Bons dias MetalFatigue,
Sou nova nestas andanças, por isso não sei o que é uma collection, nem como funcionam. Copiei a função que me postaste, mas não a consegui por a funcionar. Podes dar-me mais uma ajuda.
Se me puderes dar um exemplo num ficheiro ainda era melhor.
Bons dias jtiagodias,
Mas já tinha uma função que me conta as células coloridas.
Os links que postaste não ajudaram muito, pois são só sobre funções que contam as células coloridas. Se calhar até estava lá mais alguma info, só que como sou nova nestas andanças ainda não conheço muito de VB.
O que eu preciso é de uma função que alem de contar as células coloridas devolva a informação contida nelas se forem de uma determinada cor. Do tipo se a célula for amarela, então devolve-me o conteúdo dessa célula, mas queria que a função fizesse-se isso para uma tabela. Do estilo tenho uma tabela com varias células de diferentes cores, e queria que a função conta-se a quantidade de células com uma determinada cor, e coloca-se essa quantidade, e a seguir o conteúdo dessas células. Exemplo: 2, conteúdo da célula, conteúdo da célula.
Em 12/18/2009 às 10:41, susanajm disse:
E sê bem-vinda as estas andanças
Vou tentar detalhar melhor. Mas primeiro uma breve explicação do que é uma collection. Uma collection é um objecto tal como, por exemplo, o range. Os objectos podem ter várias funcionalidades, propriedades e valores armazenados. Pensa como se fosse um objecto real. Por exemplo um carro. tem vários componentes e várias funcionalidades que fazem dele um carro. Mas não precisas de saber como funciona um motor para o colocar a trabalhar sabes simplesmente que basta dar à chave. Tal como chamo o método x.count. Não sei como ele conta os objectos, simplesmente sei que ele me devolve o resultado. Por outro lado eu sei também que o carro tem valores armazenados, por exemplo o conta KMs, tal como no caso dos objectos range têm rg.value. etc.
Mas já me chega de alongar neste assunto. É sempre bom entender um objecto em programação uma vez que é um conceito que abrange quase todas as linguagens modernas de programação. Se tiveres curiosidade e quiseres entender melhor faz pesquisas no google por Programação Orientada a Objectos.
Para terminar a collection é um objecto que consegue armazenar seja o que for. Incluindo valores e até outros objectos. Podes pensar como um objecto abstracto. Por exemplo poderia ser uma colecção de carros. Nessa colecção poderias logo ver quantos carros tinhas e depois se quisesses poderias ver ao detalhe cada um dos carros.
Indo à tua questão...
http://img684.imageshack.us/i/semttuloeb.jpg/
De forma a exemplificar te cria um novo livro com layout semelhante a este.
Depois usas este código e vê como funciona:
'Criar uma colecção de valores de todas as celulas com cor preta que estão na àrea A1:A20
Dim cores As Collection
Set cores = CountColors(Range("A1:A20"), 1)
'Quantas celulas foram encontradas
MsgBox ("Foram encontradas " & CStr(cores.Count) & " celulas pretas")
'devolve todos os valores na colecção
'variant é um tipo de dados que pode ser de qualquer tipo
'ou seja pode ser tanto uma string como um integer
For Each i In cores
MsgBox ("Valor encontrado na colecção usando For Each: " & vbCrLf & vbCrLf & CStr(i))
'Faz o mesmo que o anterior sem usar variant e for each
For idx = 1 To cores.Count
MsgBox ("Valor encontrado na colecção usando For ""simples"": " & vbCrLf & vbCrLf & CStr(cores.Item(idx)))
'Para saber que valor se encontra na 2ªx encontrada a cor especificada:
MsgBox ("Valor encontrado pela 2ª vez: " & vbCrLf & vbCrLf & cores.Item(2))
RANGEL FREITAS 0
IMPRESSIONANTE ESTA FUNÇÃO DE CONTAR CORES.
O MEU PROBLEMA É QUE PRECISO CONTAR CÉLULAS VERDES DE UM INTERVALO. PORÉM PRECISO SABER APENAS QUANTAS CÉLULAS VERDES DESSE INTERVALO TEM VALORES MAIORES OU IGUAIS AO VALOR DA CÉLULA A1 E MENORES OU IGUAIS AO VALOR DA CÉLULA A34.
Em segundo lugar é regra de etiqueta da Internet não se escrever as frases em maiúsculas, pois dá a entender que estás a gritar. O que é desnecessário e irrita a leitura das pessoas.
Em relação à tua questão basta fazeres uma pequena alteração no código acima. Mais precisamente no If que se encontra dentro da função CountColors. Basta colocares o If assim:
If (rg.Interior.ColorIndex = color And rg.Value >= Range("A1").Value _
And rg.Value <= Range("A34").Value) Then
Assim devolve-te só as células pintadas da cor que escolheste (no meu exemplo está para preto, 1, penso que o teu verde deverá ser o 43 mas tens de ver) e se o valor da celula estiver entre os valores estabelecidos.
Boa noite, eu gostaria de adaptar para minha planilha, mas não sei por onde começar, será que pode me dar um HELP.
É o seguinte tenho uma planilha contendo vários nomes (se precisa do anexo me passa o e-mail que envio) em vez de número dentro dessas células (C4:AG29) correto, existem alguns nomes que estao com cores (amarela e/ou verde e/ou vermelho) em células diferentes mas a fonte/letra permanece todas com cor normal em preto. Portanto eu gostaria de contar quantas vezes por exemplo o nome de TIAO aparece na planilha com as células preenchida tanto nas cores por (verde/amarelo e vermelho)e assim para os outros nomes também. Mas isso sem SER NA FORMATAÇÃO CONDICIONAL. Fico grato.