susanajm Posted December 17, 2009 at 03:08 PM Report Share #301095 Posted December 17, 2009 at 03:08 PM Olá a todos, 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. ' ------------------------------------------------------------------------- ' Função que irá retornar o número de cores encontrada numa área ' (deverá ser inserido a área e o código da cor) ' ------------------------------------------------------------------------- Public Function CountColors(rng As Range, color As Integer) As Integer Dim rg As Range Dim x As Integer ' Valor inicial CountColors = 0 ' Ciclo que irá percorrer todas as células definidas For Each rg In rng ' Caso a cor interior (background) seja a escolhida If rg.Interior.ColorIndex = color Then ' Incrementa o contador x = x + 1 End If Next ' Define que a função (valor a retornar) tem o valor de x CountColors = x End Function Desde já agradeço a ajuda. Link to comment Share on other sites More sharing options...
jtiagodias Posted December 17, 2009 at 04:48 PM Report Share #301144 Posted December 17, 2009 at 04:48 PM Confesso que nem olhei para o teu código... Fui apenas a um ficheiro que já tinha guardado com link para esse código... Acho que pode ajudar: http://vbtuga.blogspot.com/2008/04/excel-contar-cores-das-clula.html Tenho também estes e aqui deixo: http://www.cpearson.com/excel/CFColors.htm http://vbtuga.blogspot.com/2008/03/formatao-condicional-expandida-em-excel.html Link to comment Share on other sites More sharing options...
MetalFatigue Posted December 17, 2009 at 09:34 PM Report Share #301185 Posted December 17, 2009 at 09:34 PM 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 Dim rg As Range Dim x As New Collection ' Valor inicial ' Ciclo que irá percorrer todas as células definidas For Each rg In rng ' Caso a cor interior (background) seja a escolhida If rg.Interior.ColorIndex = color Then ' Adiciona novo valor à colecção x.Add (rg.Value) End If Next set CountColors = x End Function 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)) Espero que te ajude Link to comment Share on other sites More sharing options...
susanajm Posted December 18, 2009 at 10:41 AM Author Report Share #301222 Posted December 18, 2009 at 10:41 AM Bons dias MetalFatigue, Obrigado pela ajuda. 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. Muito obrigado pela a ajuda. Link to comment Share on other sites More sharing options...
susanajm Posted December 18, 2009 at 10:57 AM Author Report Share #301225 Posted December 18, 2009 at 10:57 AM Bons dias jtiagodias, Obrigado pela ajuda. 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. Desde já agradeço a tua ajuda. Link to comment Share on other sites More sharing options...
MetalFatigue Posted December 19, 2009 at 04:03 PM Report Share #301436 Posted December 19, 2009 at 04:03 PM Em 12/18/2009 às 10:41, susanajm disse: Bons dias MetalFatigue, Obrigado pela ajuda. 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. Muito obrigado pela a ajuda. 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: Sub Main() '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 Dim i As Variant For Each i In cores MsgBox ("Valor encontrado na colecção usando For Each: " & vbCrLf & vbCrLf & CStr(i)) Next 'Faz o mesmo que o anterior sem usar variant e for each Dim idx As Integer For idx = 1 To cores.Count MsgBox ("Valor encontrado na colecção usando For ""simples"": " & vbCrLf & vbCrLf & CStr(cores.Item(idx))) Next 'Para saber que valor se encontra na 2ªx encontrada a cor especificada: MsgBox ("Valor encontrado pela 2ª vez: " & vbCrLf & vbCrLf & cores.Item(2)) End Sub Public Function CountColors(rng As Range, color As Integer) As Collection Dim rg As Range Dim x As New Collection ' Valor inicial ' Ciclo que irá percorrer todas as células definidas For Each rg In rng ' Caso a cor interior (background) seja a escolhida If rg.Interior.ColorIndex = color Then ' Adiciona novo valor à colecção x.Add (rg.Value) End If Next Set CountColors = x End Function Link to comment Share on other sites More sharing options...
RANGEL FREITAS Posted December 30, 2009 at 06:19 PM Report Share #303267 Posted December 30, 2009 at 06:19 PM OLÁ PESSOAL, 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. OBRIGADO, RANGEL Link to comment Share on other sites More sharing options...
MetalFatigue Posted December 31, 2009 at 10:57 AM Report Share #303388 Posted December 31, 2009 at 10:57 AM Antes de mais, Bem-vindo ao Fórum. 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. Link to comment Share on other sites More sharing options...
krek Posted October 9, 2011 at 03:44 AM Report Share #415226 Posted October 9, 2011 at 03:44 AM 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now