Jump to content
Cyb7rPirat2

[Ajuda] Macro VBA

Recommended Posts

Cyb7rPirat2

Boas pessoal,

Estou aqui com uma dúvida de VBA...

Tenho duas tabelas iguais, mas com valores diferentes.

Ambas em worksheets diferentes e posicionadas no mm sitio em cada worksheet.

Como posso comparar os valores entre as duas, e caso os valores de uma das colunas sejam diferentes como meto numa outra tabela o valor da diferença? (tenho de usar macros)

O que já tentei fazer foi usar o vlookup do vba... Usar o if... e algumas outras coisas como o do while... neste preciso momento tenho este código feito por mim:

Public Sub comp()

Dim tab1 As Range, tab2 As Range, cel As Range

Set tab1 = Worksheets("base").Select

Set tab2 = Worksheets("mensal").Select

Dim i As Integer

cel = Cells(i, 2)

For i = 7 To 23 Step 1

If tab1.cel.Select <> tab2.cel.Select Then

'Se os valores forem iguais nada acontece. Se os valores forem diferentes, tenho de fazer a diferença entre ambos e meter o valor noutra tabela, noutra worksheet.

End If

Next i

End Sub

Cumps

Share this post


Link to post
Share on other sites
FreiNando

Pelo que vejo estás a selecionar toda a folha, então o enderesso é relativo à coluna C linhas 7 a 23.

Queres que na 3ª folha apareçam as diferenças na mesma posição?

Fiz uma pequena modificação ao teu código, onde a folha para as diferenças é 'Diferenca'

Não precisas selecionar nem as folhas, nem as celulas para compararers o seu valor.

Public Sub Comp()
    Dim tab1 As Range, tab2 As Range, tab3 As Range
    
    Set tab1 = Worksheets("base").Range("C1")
    Set tab2 = Worksheets("mensal").Range("C1")
    Set tab3 = Worksheets("diferenca").Range("C1")
    
    Dim i As Integer
    For i = 7 To 23
        If tab1.Offset(i, 2) <> tab2.Offset(i, 2) Then
            tab3.Offset(i, 2) = tab1.Offset(i, 2) - tab2.Offset(i, 2)
        Else
            'nada acontece, mas pode já existir valores
            'por isso é melhor apagá-los
            tab3.Offset(i, 2).ClearContents
        End If
    Next i
    MsgBox "Terminado!"
End Sub


O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

P.S.: As diferenças é para aparecer noutra posição, mas julgo que não seja díficil agora fazê-lo...

É só alterar esta linha:    Set tab3 = Worksheets("diferenca").Range("C1")

Certo?

Basta alterar o 'C1' para o posição que pretendes


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
FreiNando

Muito obrigado :) Diz-me uma coisa, quando não escrevemos o step aquilo assimila que valor?

Em VB os ciclos For ... Next por defeito incrementam o indice em 1, mas pode ser especificado qualquer outro valor positivo ou negativo.

Embora na maioria dos caso se utilize um numero inteiro para indice, é possivel usar single ou double e no passo(step) indicar um numero decimal.

Temos é de tomar cuidado com a precisão, principalmente no caso de usar um single.


O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Share this post


Link to post
Share on other sites
FreiNando

😎

Public Sub Comp()
    Dim tab1 As Range, tab2 As Range, tab3 As Range
   
    Set tab1 = Worksheets("base").Range("B1")
    Set tab2 = Worksheets("mensal").Range("B1")
    Set tab3 = Worksheets("dif").Range("B7") 'Primeira celula para as diferencas

    Dim i As Integer
    For i = 7 To 23
        If tab1.Offset(i, 0) <> tab2.Offset(i, 0) Then
            tab3 = tab2.Offset(i, 0) - tab1.Offset(i, 0)
            Set tab3 = tab3.Offset(1,0) 'Celula da linha seguinte
         End If
    Next i
    MsgBox "Terminado!"
End Sub


O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Share this post


Link to post
Share on other sites
FreiNando

Volta ao primeiro exemplo, já tem a tabela.


O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

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.