none
REPLICAR A FORMULA PARA AS DEMAIS LINHAS - EXCEL VBA RRS feed

  • Pergunta

  • Olá, Caros Amigos Desenvolvedores.

    Estou com uma duvida, gostaria de uma ajuda.

    Em minha planilha tenho 2 colunas com dados; Onde na segunda coluna tenho linhas sem dados.

    Eu ordeno na segunda coluna os dados do maior ao menor, e em, seguida realizo um PROCV em outra planilha para trazer esses dados faltantes. Meu problema está sendo para replicar meu PROCV até a última linha com dados (baseando se na 1ª coluna)

    Oque montei:

    Sub PROCV()
    '
    ' PROCV Macro
    '
        'CLASSIFICAÇÃO DO MAIOR PARA O MENOR.
             ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort.SortFields.Add Key:=Range( _
            "N2"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
         
         'DEFINI A ÚLTIMA LINHA VAZIA NA COLUNA ONDE VOU REALIZAR MEU PROCV
         Range("N2").End(xlDown).Offset(1, 0).Select
         
         'APLICO A FORMULA DO MEU PROCV
         ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],[BASE_PRODUTOS.xlsm]DS!C3:C5,3,0)"
         
         'PRECISO QUE ESSA FORMULA SEJA EXECUTADA ATÉ A ÚLTIMA LINHA DOS VALORES PROCURADOS NO PROCV
       
        
    End Sub

    Seria isso:

    Desde já fico muito grato pela ajuda.

    Jhonny César de Paula


    Obrigado! Jhonny César de Paula

    terça-feira, 27 de fevereiro de 2018 17:31

Todas as Respostas

  • Experimente acrescentar as 2 linhas abaixo no final do seu código.

        LastRow = Cells(Rows.Count, "M").End(xlUp).Row
    
        Range("N2").AutoFill Range("N2").Resize(LastRow)


    Click em propor como resposta se foi util a voce. ricardodm@outlook.com.br

    terça-feira, 27 de fevereiro de 2018 17:45
  • Ricardo,

    Inclui os códigos que mencionou, porém não deu certo.

    Ele não realizou o PROCV, apenas replicou os dados da 1ª linha para as demais e ainda trouxe 1 linha a mais.

    Meu código:

    Sub GNAT02()
    '
    ' GNAT02 Macro
    
        'CLASSIFICAÇÃO DO MAIOR PARA O MENOR.
             ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort.SortFields.Add Key:=Range( _
            "N2"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
         
            
         'DEFINI A ÚLTIMA LINHA VAZIA NA COLUNA ONDE VOU REALIZAR MEU PROCV
         Range("N2").End(xlDown).Offset(1, 0).Select
         
         'APLICO A FORMULA DO MEU PROCV
         ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],[BASE_PRODUTOS.xlsm]DS!C3:C5,3,0)"
         
         LastRow = Cells(Rows.Count, "M").End(xlUp).Row
         
         Range("N2").AutoFill Range("N2").Resize(LastRow)
         
         'PRECISO QUE ESSA FORMULA SEJA EXECUTADA ATÉ A ÚLTIMA LINHA DOS VALORES PROCURADOS NO PROCV SEJA "VAZIO"
       
        
    End Sub
    


    Obrigado! Jhonny César de Paula

    terça-feira, 27 de fevereiro de 2018 18:30
  • Jhonny 

    Faça o teste agora, após este ajuste.

    Sub GNAT02()
    '
    ' GNAT02 Macro
    
        'CLASSIFICAÇÃO DO MAIOR PARA O MENOR.
             ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort.SortFields.Add Key:=Range( _
            "N2"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
         
            
         'DEFINI A ÚLTIMA LINHA VAZIA NA COLUNA ONDE VOU REALIZAR MEU PROCV
         Range("N2").End(xlUp).Offset(1, 0).Select
         
         'APLICO A FORMULA DO MEU PROCV
         ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],[BASE_PRODUTOS.xlsm]DS!C3:C5,3,0)"
         
         LastRow = Cells(Rows.Count, "M").End(xlUp).Row
         
         Range("N2").AutoFill Range("N2").Resize(LastRow - 1)
         
         'PRECISO QUE ESSA FORMULA SEJA EXECUTADA ATÉ A ÚLTIMA LINHA DOS VALORES PROCURADOS NO PROCV SEJA "VAZIO"
       
        
    End Sub
    
    


    Click em propor como resposta se foi util a voce. ricardodm@outlook.com.br

    terça-feira, 27 de fevereiro de 2018 20:28
  • Bom Dia, Ricardo.

    Resolveu o problema dele parar na linha correta, só que a formula do PROCV não está funcionando.

    Antes e o depois da sua sugestão:

    No meu código eu consegui que a formula fosse executada na "N6" que era a primeira linha vazia da coluna "N" Eu só não consigo expandir isso para as demais linhas da coluna.

    OBS: Realizei uma alteração no código do PROCV para ele busca na coluna "-1" ao invés da "-3"

    Meu código com sua sugestão:

    Sub GNAT02()
    '
    ' GNAT02 Macro
    '
    '    'CLASSIFICAÇÃO DO MAIOR PARA O MENOR.
             ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort.SortFields.Add Key:=Range( _
            "N2"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("Plan1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
         
         'DEFINI A ÚLTIMA LINHA VAZIA NA COLUNA ONDE VOU REALIZAR MEU PROCV
         Range("N2").End(xlDown).Offset(1, 0).Select
         
         'APLICO A FORMULA DO MEU PROCV
         ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],[BASE_PRODUTOS.xlsm]DS!C3:C5,3,0)"
         
         'SUGESTAO DO RICARDO VBA:
       
         LastRow = Cells(Rows.Count, "M").End(xlUp).Row
         
         Range("N2").AutoFill Range("N2").Resize(LastRow - 1)
        
    End Sub

    desde já agradeço a ajuda!


    Obrigado! Jhonny César de Paula

    quarta-feira, 28 de fevereiro de 2018 12:35
  • estou com a mesma dúvida, já pesquisei em outros fóruns e também não achei a solução
    quinta-feira, 1 de março de 2018 12:08