Notifications
Clear all

Macro - Localiza, copia e cola

9 Posts
3 Usuários
0 Reactions
2,433 Visualizações
(@ricardodim)
Posts: 3
Active Member
Topic starter
 

Olá, sou novo nas arte-manhas de macro, e estou apanhando para criar uma macro.
É o seguinte, tenho duas 2 planilhas (Plan1 e Plan2).
Na Plan1 tenho uma célula onde irei digitar um valor (ex. A1). Gostaria de uma macro que buscasse esse valor, digitado na Plan1 célula A1, na Plan2, caso encontrar este valor me trazer o texto que está na célula a frente deste valor (a macro encontrou o valor numa célula random qualquer ex. F9, e a macro copiar o valor da célula G9, célula a frente da encontrada, e colar esse valor em uma célula da Plan1 ex. A2).

Agradeço antecipadamente, Obrigado.

 
Postado : 27/04/2012 11:02 am
(@danyahoo)
Posts: 49
Trusted Member
 

Acredito que um simples PROCV resolva seu problema.

=PROCV(A1;Plan2!A1:B4;2;0)

Onde:

A1 é o valor que você está procurando.
Plan2!A1:B4 é o intervalo na PLAN2 que você está buscando a informação.
2 é a coluna do valor que você quer que retorne, no caso a coluna B da plan 2.

Veja se consegue aplicar.

 
Postado : 27/04/2012 11:20 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!
Seja bem vindo!!

Use a pesquisa do fórum para achar casos próximos ou idênticos ao seu..

Caso não consiga e eu até duvido, poste um modelo COMPACTADO, rico em detalhes.

Att

 
Postado : 27/04/2012 11:22 am
(@ricardodim)
Posts: 3
Active Member
Topic starter
 

O PROCV não funciona pois os dados que eu quero estão em várias colunas diferentes numa mesma planilha.

Já havia procurado aqui no fórum algo a respeito mas não achei nada.

Esta seria a Plan1 a esquerda onde irá entrar o numero serial e a direita a célula de status irá me trazer da Plan2 o status deste serial.

Aqui é onde estou encontrando o problema na hora de buscas, pois não posso colocar os serias numa única célula, preciso que a macro faça essa busca na Plan2 do serial digitado na Plan1 - C5, e encontrando ela, copie da Plan2 a coluna a frente do serial encontrado, onde esta escrito AÇÃO, e coloque essa informação na Plan1 - E5.

 
Postado : 27/04/2012 12:55 pm
(@danyahoo)
Posts: 49
Trusted Member
 

Humm, então acho que as funções DESLOC+CORRESP talves possam te ajudar...

Só não sei como aplicá-las em seu problema.

 
Postado : 27/04/2012 1:55 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!
Ricardo, ainda precisa de ajuda???
Poderia postar seu arquivo (COMPACTADO)??

Att

 
Postado : 28/04/2012 12:43 pm
(@ricardodim)
Posts: 3
Active Member
Topic starter
 

Alexandre, DanyahoO, Muito obrigado pela ajuda, mas já consegui o código que precisava.

Sub ProcurarCopiar()
Dim Celula As Range
Dim Valor

Valor = Sheets("Plan1").[A1].Value

For Each Celula In Sheets("Plan2").UsedRange
If Celula.Value = Valor Then
Sheets("Plan1").[A2].Value = Celula.Offset(0, 1).Value
Exit For
End If
Next
End Sub

Atendeu exatamente o que precisava.

 
Postado : 29/04/2012 10:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Por favor marque seu tópico como resolvido!!

Veja com em:
viewtopic.php?f=7&t=3784

 
Postado : 29/04/2012 10:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

ricardo, apesar de ja ter posto como resolvido, segue uma variação da rotina :

Sub ProcurarCopiarMauro()

    Dim Cell As Variant
    Dim uRange As Range
    Dim x As Long
    Dim CellTxt As String
    Dim RngFindTitle As Range
    Dim FindTitle As Integer
    Dim tRow As Long
    Dim tCol As Integer
    Dim sW  As Worksheet
    Set sW = Worksheets("Plan1")
    
    x = Sheets("Plan1").[A1].Value
    
    Set uRange = sW.UsedRange
    
    Set RngFindTitle = uRange.Find(sW.UsedRange)
    
        If RngFindTitle Is Nothing Then
            MsgBox ("Valor não Localizado !")
        Else
        
            For Each Cell In uRange
                CellTxt = UCase(sW.Cells(Cell.Row, Cell.Column).Text)
                FindTitle = InStr(1, CellTxt, x)
                
                If FindTitle <> 0 Then
                    tRow = Cell.Row
                    tCol = Cell.Column
                    
                    Sheets("Plan1").[A2].Value = sW.Cells(tRow, tCol).Offset(0, 1).Value
                    
                End If
            Next
        End If
End Sub

Faça um teste com esta, que acredito que utilizando o Método Find teremos um ganho de performance.

Uma outra obs, é que devemos tomar cuidado ao utilizar UsedRange, pois se apagar o valor da última celula, a mesmaa inda fará parte do UsedRange, a não ser que limpe o conteúdo total.
Para entender melhor o que eu disse acima, na aba que contem os dados pressione simultaneamente asTeclas CTRL + END e veja onde o cursor irá parar, se for uma celula com dados, apague utilizando a Tecla DEL, pressione CTRL+HOME e depois CTRL + END e verá que o cursor irá parar na celula apagada, é isto que o usedRange interpretará.
Não sei se fui claro, mas se realizar o teste entenderá melhor.

[]s

 
Postado : 29/04/2012 11:31 am