Notifications
Clear all

Formatar LISTA via VBA

9 Posts
2 Usuários
0 Reactions
1,064 Visualizações
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Olá bom dia a todos!

Gostaria de solicitar a ajuda de vocês para resolver parte de uma tarefa. Preciso fazer um menu suspenso do tipo LISTA onde, a partir de uma seleção as opções sejam adaptada ao valor selecionado. Isso já foi muito visto aqui no forum, as chamadas listas personalisadas do tipo, escolher uma região do país e serem exibidos somente os estados dessa região.

O meu problema está em formatar as informações!

A minha tarefa é automatizar a formatação das informações que irão compor a lista. tenho uma coluna onde estão todas as informações, porém da forma como estão dispostas não é possível fazer a lista personalisada. Imaginem o exemplo que dei das regiões e estados, no meu caso essas informações estão na mesma coluna. O que preciso é separá-las. Em anexo segue um exemplo dessas informações sendo a divisão da seguinte forma:

Os números inteiros (1, 2, 3, 4...) seriam as regiões e os códigos restantes seriam os estados (04.01, 04.02, 04.03, 04.04...estes seriam estados do código 4).

Imaginei uma macro que percorresse a coluna no intervalo "A1:B200" para verificar e copiar para outras colunas os valores correspondentes, ou seja, os números inteiros em uma coluna e o outros códigos em outra coluna. Como resultado, imagino que teríamos o seguinte:

4 - 04.01
4 - 04.02
4 - 04.03
4 - 04.04

E dessa forma poder configurar a lista personalisada !

Acho que deu prá entender..

Desde já agradeço pela ajuda...

Obs: Como pode ser visto no arquivo, existe uma linha entre cada código, é apenas uma questão de formatação que deve ser levada em consideração, mas que não deve influir no resultado...E mais, as informações estão sempre nas mesmas colunas A e B.

 
Postado : 11/08/2015 7:04 am
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

PESSOAL,

Eu só preciso de uma macro para agrupar as informações em duas colunas ! Assim eu poderei criar a lista personalisada...

Obrigado

 
Postado : 11/08/2015 8:19 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei se entendi, mas veja se é mais ou menos isto.

Observando que antes de executar tem de eliminar todas as linhas em branco

Sub SplitLista()
    Dim n
    Dim i
    Dim celula
    Dim sCaract
    Dim sA, sB
    
    fimbase = Range("A60000").End(xlUp).Row
    
    For consulta = 2 To fimbase
        celula = Cells(consulta, 1).Text
        
        sCaract = Len(celula)
        
        With celula
            n = Split(celula, ".")
            ID = (n(i))
            
            If sCaract = 1 Then
                Cells(consulta, 3).NumberFormat = "@"
                Cells(consulta, 3) = ID
            Else
                sA = Cells(consulta, 1).Text
                sB = Cells(consulta, 2).Text
                
                Cells(consulta, 3).NumberFormat = "@"
                Cells(consulta, 3) = ID & " - " & sA '& " - " & sB
            End If
            
        End With
        
     Next

End Sub

[]s

 
Postado : 12/08/2015 8:48 am
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Olá Mauro

É quase isso. Em uma coluna ficam apenas os valores inteiros e em outra coluna os códigos correspondetes a este número inteiro. Os números inteiros são os grupos e os outros números são os sub-grupos...

Exemplo:

Intervalo A1:A5
1
1
1
1
1

Intervalo B1:B5
01.01
01.02
01.03
01.04
01.05

 
Postado : 12/08/2015 8:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se seria isto, aproveitei adicionei uma rotina separada para deletar as linhas em branco, mas se já deletou as linhas não execute ela, só a de decompor.

Sub DeletaLinhasEmBranco()

    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.EntireRow.Delete
    
    Call SplitLista
    
End Sub

Sub SplitLista()
    Dim n
    Dim i
    Dim celula
    Dim sCaract
    Dim sA, sB
    Dim IdTemp As Long
    fimbase = Range("A60000").End(xlUp).Row
    
    For consulta = 2 To fimbase
        celula = Cells(consulta, 1).Text
        
        sCaract = Len(celula)
        
        With celula
            n = Split(celula, ".")
            
            ID = (n(i))
            
            If sCaract = 1 Then
                'Cells(consulta, 3).NumberFormat = "@"
                Cells(consulta, 3) = ID
                IdTemp = ID
            Else
            
                If ID = IdTemp Then
                    sA = Cells(consulta, 1).Text
                    sB = Cells(consulta, 2).Text
                    
                    Cells(consulta - 1, 3) = ID
                    Cells(consulta - 1, 4).NumberFormat = "@"
                    Cells(consulta - 1, 4) = sA
                    'Cells(consulta - 1, 4) = ID & " - " & sA  '& " - " & sB
                   
                End If
                
            End If
            
        End With
        
     Next

End Sub
 
Postado : 12/08/2015 11:00 am
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

PERFEITO!

Direto ao ponto!

Muito obrigado, mais uma vez.

 
Postado : 12/08/2015 1:52 pm
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Ops!!!

Reparei depois que enviei a ultima mensagem...a macro só formatou até o código 9, ou seja, até o código com uma casa decimal. Alguma relação ?

 
Postado : 12/08/2015 1:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ops!!!
Reparei depois que enviei a ultima mensagem...a macro só formatou até o código 9, ou seja, até o código com uma casa decimal. Alguma relação ?

Eu não havia feito testes em seu modelo completo, tinha pego somente algumas linhas, e se ler atentamente o que escreveu e der uma analisada na rotina verá que já matou a charada e praticamente resolveu.

código 9 com uma casa decimal.
Código 10 são duas casas decimais,

Então na linha em que temos a condição da qde de caracteres :
If sCaract = 1 Then
alteramos para :
If sCaract <= 2 Then - vou deixar voce pensar um pouco o porque de "<=" e não somente "="

Agora se for ter codigos com 3 digitos tem de fazer ajustes na rotina.

[]s

 
Postado : 12/08/2015 7:19 pm
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Kakakakakakakakakakakakaka

Taí, foi a melhor explicação para as soluções que já vi aqui. Fiz a analise e percebi a situação, mas optei por fazer a observação e confirmar minha percepção.
Quanto a <=2, é evidente que cria uma situação a qual eu preciso, visto que possuem códigos com 1 ou 2 caracteres...se fosse -2, aí seria o inverso do que ocorreu.

Valeu ! Muito boa, um dia eu aprendo.

 
Postado : 13/08/2015 6:06 am