Jump to content
Sheepmix

[Ajuda] Iniciante em VBA. Comparar dados e inserir dados em falta de uma tabela.

Recommended Posts

Sheepmix

Boa tarde

Antes demais peço desculpa caso este assunto já tenha sido postado. mas não o encontrei.

O problema é o seguinte. Estou num estágio curricular, e objectivo do mesmo era apenas fazer uma página num website. Este foi feito mas sobram me horas para completar o estágio e vou fazendo tarefas que eles me pedem. Nunca tive nenhum problema até agora. pediram me para fazer uma macro em excel e eu não pesco nada de programação em VBA muito menos em excel.

Se me pudessem ajudar ficaria grato pois estou apertado de tempo e disseram me que isto vai ter peso na nota.

O que me pediram foi o seguinte:

Tenho dois documentos em excel.(Cada um com uma folha)

A Folha 1 tem moradas e os respectivos códigos postais.

A folha 2 só tem as moradas.

O objectivo é comparar os campos da F1 e da F2 e completar a F2 com os códigos postais da F1.

As linhas são 7000 e as colunas são da A a J. e as colunas dos códigos postais são o : H, I, J.

Peço desculpa por estar a incomodar mas preciso mesmo da vossa ajuda urgentemente.  :dontgetit:

Agradecia uma resposta até amanhã se possível, visto que tenho menos de uma semana para concretizar este trabalho.

Cumprimentos

sheepmix

Share this post


Link to post
Share on other sites
jmaocubo

Podes postar o teu livro para se entender melhor?

Em principio será através de um vblookup

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Podes fazer o upload do livro para um site de partilha

Ex:

2 Shared

4 Shared

Depois carregas no botão Inserir Hiperligação o metes o link.

Tipo assim:

<a href="www.google.pt">Google</a>
 

A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

E em relação aos campos não coincidentes??

È para deixar em Branco, apagar, deixar alguma sinalização,...?


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Desculpa pelo atraso, mas quando já estava tudo pronto, "O Excel encontrou em erro, e teve de fechar" e lá se foi o trabalho  :thumbsup::D

É só copiares e colares num Module

Está a ir buscar o Livro Completo à Pasta C:\Livros\LivroCompleto. É só alterares a localização para onde está o teu livro

Sub Verifica()
Dim datainicial As Date
datainicial = DateTime.Time

Dim xl As New Excel.Application
Dim l_Comp, wbkNew As Excel.Workbook

'Abre o ficheiro Excel -> Livro Completo e define a varavel L_Comp como o livro Completo
'Altera para a localização do livro
Set l_Comp = xl.Workbooks.Open("C:\Livros\LivroCompleto.xlsx")
'define qual a Folha em que vai trabalhar -> Trabalho
l_Comp.Sheets("Trabalho").Select

'Define este Livro como o Livro Incompleto
Set l_Incomp = ThisWorkbook
'Activa este Livro
l_Incomp.Activate
'Activa a 'Trabalho'
Sheets("Trabalho").Activate

'Conta o numero de linhas existentes na Coluna A, B, C,... do Livro Completo
maior_a = l_Comp.Sheets("Trabalho").Range("A" & Rows.Count).End(xlUp).Row
maior_b = l_Comp.Sheets("Trabalho").Range("B" & Rows.Count).End(xlUp).Row
maior_c = l_Comp.Sheets("Trabalho").Range("C" & Rows.Count).End(xlUp).Row
maior_d = l_Comp.Sheets("Trabalho").Range("D" & Rows.Count).End(xlUp).Row
maior_e = l_Comp.Sheets("Trabalho").Range("E" & Rows.Count).End(xlUp).Row
maior_f = l_Comp.Sheets("Trabalho").Range("F" & Rows.Count).End(xlUp).Row
maior_g = l_Comp.Sheets("Trabalho").Range("G" & Rows.Count).End(xlUp).Row
maior_h = l_Comp.Sheets("Trabalho").Range("H" & Rows.Count).End(xlUp).Row
maior_i = l_Comp.Sheets("Trabalho").Range("I" & Rows.Count).End(xlUp).Row
maior_j = l_Comp.Sheets("Trabalho").Range("J" & Rows.Count).End(xlUp).Row

maior = maior_a 'Atribui o maior ao valor da coluna A

'Verifica se o valor maior, continua a ser maior valor, em relação às outras colunas.
'Se não for, alterar para esse valor
'Serve apenas para obter qunatas linhas tem, na realidade.
'Se for só a guiar-me por uma coluna, essa coluna pode ter uma linha a menos em relalção ás outas.
'Assim vejo todas e no final, fico com o valor mais alto

    If maior < maior_b Then
      maior = maior_b
      
      ElseIf maior < maior_c Then
      maior = maior_c
            
      ElseIf maior < maior_d Then
      maior = maior_d

      ElseIf maior < maior_e Then
      maior = maior_e

      ElseIf maior < maior_f Then
      maior = maior_f

      ElseIf maior < maior_g Then
      maior = maior_g

      ElseIf maior < maior_h Then
      maior = maior_h

      ElseIf maior < maior_i Then
      maior = maior_i

      ElseIf maior < maior_j Then
      maior = maior_j
      
    End If
     
     
     MsgBox maior
     
     'Começa na linha 1 (inclui cabeçalhos). Dá para por a começar onde se quiser
For i = 1 To maior 'Vai percorrer linha a linha até chegar ao máximo do número de linhas que foram contadas anteriormente
       
       'Verifica se o Valor do Livro Incompleto na Coluna A, linha i, é igual ao valor do Livro Completo.
       'Se for igual, passa à coluna seguinte. Se não, sai do if
    If l_Incomp.Sheets("Trabalho").Range("A" & i).Value = l_Comp.Sheets("Trabalho").Range("A" & i).Value Then
       
       'Igual à anterior, mas para a coluna B...
        If l_Incomp.Sheets("Trabalho").Range("B" & i).Value = l_Comp.Sheets("Trabalho").Range("B" & i).Value Then
    
            'Igual à anterior, mas para a coluna C...
             If l_Incomp.Sheets("Trabalho").Range("C" & i).Value = l_Comp.Sheets("Trabalho").Range("C" & i).Value Then

                'Igual à anterior, mas para a coluna D...
                If l_Incomp.Sheets("Trabalho").Range("D" & i).Value = l_Comp.Sheets("Trabalho").Range("D" & i).Value Then
         
                   'Igual à anterior, mas para a coluna E...
                   If l_Incomp.Sheets("Trabalho").Range("E" & i).Value = l_Comp.Sheets("Trabalho").Range("E" & i).Value Then
           
                      'Igual à anterior, mas para a coluna F...
                      If l_Incomp.Sheets("Trabalho").Range("F" & i).Value = l_Comp.Sheets("Trabalho").Range("F" & i).Value Then
                
                        'Igual à anterior, mas para a coluna G...
                        If l_Incomp.Sheets("Trabalho").Range("G" & i).Value = l_Comp.Sheets("Trabalho").Range("G" & i).Value Then
                     
                           'Se chegou até aqui,é porque os valores são todos iguais. Então...
                           
                           'Mete o valor da coluna H, linha i do Livro Incompleto, igual ao valor da Coluna H, linha i do Livro Completo
                           l_Incomp.Sheets("Trabalho").Range("H" & i).Value = l_Comp.Sheets("Trabalho").Range("H" & i).Value
                           
                           'Mete o valor da coluna I, linha i do Livro Incompleto, igual ao valor da Coluna I, linha i do Livro Completo
                           l_Incomp.Sheets("Trabalho").Range("I" & i).Value = l_Comp.Sheets("Trabalho").Range("I" & i).Value
                           
                           'Mete o valor da coluna J, linha i do Livro Incompleto, igual ao valor da Coluna J, linha i do Livro Completo
                           l_Incomp.Sheets("Trabalho").Range("J" & i).Value = l_Comp.Sheets("Trabalho").Range("J" & i).Value
                                     
                        End If
                      End If
                   End If
                End If
             End If
        End If
    End If
    

Next i ' Avança uma linha


  
' Fecha o Livro Completo sem guardar alterações. Neste caso não é feita nenhuma alteracção.
' Para guardar é só alterar o False Para True
l_Comp.Close False

' Liberta-se a memória
Set l_Comp = Nothing
Set l_Incomp = Nothing

Dim datafinal As Date
datafinal = DateTime.Time

Dim Tempo As Date

Tempo = datafinal - datainicial

MsgBox Tempo
    
End Sub


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
Sheepmix

Boas

Não tens que pedir desculpa, aliás eu é que tenho de pedir desculpa pelo incómodo.

Coloquei o programa a correr, tá a demorar uma beca mas deve ser do pc onde estou não é lá grande coisa tem pouca memória.

Obrigadão pela ajuda, livraste-me de boa !

Cumps

Share this post


Link to post
Share on other sites
Andrepereira9

eu aqui teste aqui e ele demorou 1 minuto e 57 segundos

Num Pentium 4 3.5 Ghz com 4 Gb de RAM

Mas também são 6 mil e tal linhas  :thumbsup:


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
Sheepmix

Neste pc demorou , mas deu lool

Mais uma vez, obrigado pela tua ajuda ! :thumbsup:

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

1º Bem vindo ao fórum  ;)

2º Não se continuam tópicos, que não tenham a haver com o assunto.

Novas questões = Novos tópicos

3º Aqui não se fazem os TPCs. Tiram-se dúvidas...


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.