Notifications
Clear all

DUVIDAS COM VLOOKUP (PROCV)

13 Posts
1 Usuários
0 Reactions
1,292 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá pessoal fiz uma macro com a função VLOOKUP o famoso Procv, mas não estou conseguindo obter o resultado esperado, poderiam dar uma olhada onde estou errando?

Segue o código:

Plan2.Cells(linha, 17) = ActiveCell.FormulaR1C1 =   "=IF(ISERROR(VLOOKUP(Plan2!RC2,Plan5!R2C4:R367C8,2,FALSE)),VLOOKUP(Plan2!RC2,Plan5!R2C4:R367C8,2,FALSE)))"

silvajmp

 
Postado : 09/11/2013 4:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Vc precisa desta fórmula:

=SE(ÉERROS(PROCV(A3;Parâmetros!$D$2:$H$367;2;));"";PROCV(A3;Parâmetros!$D$2:$H$367;2;))

Logo, no VBA deve ser algo assim

"=IF(ISERROR(VLOOKUP(RC[-16],Parâmetros!R2C4:R367C8,2,)),"""",VLOOKUP(RC[-16],Parâmetros!R2C4:R367C8,2,))"

Me avise.

Abs,

 
Postado : 09/11/2013 6:52 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Matrix obrigado por me atender, fiz a alteração e o teste, mas não deu certo, o resultado continua sendo FALSO, segue a baixo todo o código que estou utilizando para meu controle. O código referente esta na linha 17 do código.

Sub auto_open()
UserForm1.Show
End Sub

Sub Imp_Dados()

'Definições de variáveis

Dim linha
Dim name

'Definição de valores nas variáveis

linha = 3
name = "CONT_DISP-APR.xlsm"
frmProcesso.Show
Call contar
   ' Application.ScreenUpdating = False
   ' Workbooks.Open Filename:= _
   ' Plan1.Cells(4, 7).Text
   ' Windows("boletim.xls").Activate
   ' Range("A1:G100").Select
   ' Selection.Copy
   ' Windows(name).Activate
   ' Plan6.Activate
   ' Range("A1:G100").Select
   ' ActiveSheet.Paste
   ' Plan6.Cells(100, 1) = "FIM"
   ' Application.CutCopyMode = False
   ' Plan1.Activate
   ' Windows("boletim.xls").Activate
   ' ActiveWindow.Close
   ' Application.ScreenUpdating = True
    While (Plan2.Cells(linha, 2) <> "")
     linha = linha + 1
    Wend
                
      If (Plan6.Cells(8, 3).Text = "Revisão ") Then
          

          Plan2.Cells(linha, 1) = CDate(Mid(Plan6.Cells(9, 3).Text, 1, 6) & Mid(Plan6.Cells(9, 3).Text, 9, 2))
          Plan2.Cells(linha, 2) = Plan6.Cells(12, 3) 'horas de moagem diario geral
          Plan2.Cells(linha, 3) = Plan6.Cells(13, 3) 'horas pedidas ponderada diario geral
          Plan2.Cells(linha, 4) = Plan6.Cells(16, 3) 'tempo de aproveitamento diario geral
          Plan2.Cells(linha, 5) = Plan6.Cells(32, 3) 'cana moida por hora efetiva diario geral
          Plan2.Cells(linha, 6) = Plan6.Cells(31, 3) 'cana moida diario geral
          Plan2.Cells(linha, 7) = Plan6.Cells(19, 3) 'horas de moagem diario mda 54
          Plan2.Cells(linha, 8) = Plan6.Cells(20, 3) 'horas pedidas diario mda 54
          Plan2.Cells(linha, 9) = Plan6.Cells(23, 3) 'tempo de aproveitamento diario mda 54
          Plan2.Cells(linha, 10) = Plan6.Cells(49, 3) 'cana moida por hora efetiva diario mda 54
          Plan2.Cells(linha, 11) = Plan6.Cells(48, 3) 'cana moida diario mda 54
          Plan2.Cells(linha, 12) = Plan6.Cells(25, 3) 'horas de moagem diario mda 66
          Plan2.Cells(linha, 13) = Plan6.Cells(26, 3) 'horas pedidas diario mda 66
          Plan2.Cells(linha, 14) = Plan6.Cells(29, 3) 'tempo de aproveitamento diario mda 66
          Plan2.Cells(linha, 15) = Plan6.Cells(73, 3) 'cana moida por hora efetiva diario mda 66
          Plan2.Cells(linha, 16) = Plan6.Cells(72, 3) 'cana moida diario mda 66
          
          Plan2.Cells(linha, 17) = ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP([-16],Parâmetros!R2C4:R367C8,2,)),"""",VLOOKUP([-16],Parâmetros!R2C4:R367C8,2,)))"
          Plan2.Cells(linha, 18) = Trim(Plan6.Cells(12, 4)) 'horas de moagem semanal geral
          Plan2.Cells(linha, 19) = Trim(Plan6.Cells(13, 4)) 'horas pedidas ponderada semanal geral
          Plan2.Cells(linha, 20) = Trim(Plan6.Cells(16, 4)) 'tempo de aproveitamento semanal geral
          Plan2.Cells(linha, 21) = Trim(Plan6.Cells(32, 4)) 'cana moida por hora efetiva semanal geral
          Plan2.Cells(linha, 22) = Trim(Plan6.Cells(31, 4)) 'cana moida semanal geral
          Plan2.Cells(linha, 23) = Trim(Plan6.Cells(19, 4)) 'horas de moagem semanal mda 54
          Plan2.Cells(linha, 24) = Trim(Plan6.Cells(20, 4)) 'horas pedidas semanal mda 54
          Plan2.Cells(linha, 25) = Trim(Plan6.Cells(23, 4)) 'tempo de aproveitamento semanal mda 54
          Plan2.Cells(linha, 26) = Trim(Plan6.Cells(49, 4)) 'cana moida por hora efetiva semanal mda 54
          Plan2.Cells(linha, 27) = Trim(Plan6.Cells(48, 4)) 'cana moida semanal mda 54
          Plan2.Cells(linha, 28) = Trim(Plan6.Cells(25, 4)) 'horas de moagem semanal mda 66
          Plan2.Cells(linha, 29) = Trim(Plan6.Cells(26, 4)) 'horas pedidas semanal mda 66
          Plan2.Cells(linha, 30) = Trim(Plan6.Cells(29, 4)) 'tempo de aproveitamento semanal mda 66
          Plan2.Cells(linha, 31) = Trim(Plan6.Cells(73, 4)) 'cana moida por hora efetiva semanal mda 66
          Plan2.Cells(linha, 32) = Trim(Plan6.Cells(72, 4)) 'cana moida semanal mda 66

          Plan2.Cells(linha, 34) = Trim(Plan6.Cells(12, 6)) 'horas de moagem mensal geral
          Plan2.Cells(linha, 35) = Trim(Plan6.Cells(13, 6)) 'horas pedidas ponderada mensal geral
          Plan2.Cells(linha, 36) = Trim(Plan6.Cells(16, 6)) 'tempo de aproveitamento mensal geral
          Plan2.Cells(linha, 37) = Trim(Plan6.Cells(32, 6)) 'cana moida por hora efetiva mensal geral
          Plan2.Cells(linha, 38) = Trim(Plan6.Cells(31, 6)) 'cana moida mensal geral
          Plan2.Cells(linha, 39) = Trim(Plan6.Cells(19, 6)) 'horas de moagem mensal mda 54
          Plan2.Cells(linha, 40) = Trim(Plan6.Cells(20, 6)) 'horas pedidas mensal mda 54
          Plan2.Cells(linha, 41) = Trim(Plan6.Cells(23, 6)) 'tempo de aproveitamento mensal mda 54
          Plan2.Cells(linha, 42) = Trim(Plan6.Cells(49, 6)) 'cana moida por hora efetiva mensal mda 54
          Plan2.Cells(linha, 43) = Trim(Plan6.Cells(48, 6)) 'cana moida mensal mda 54
          Plan2.Cells(linha, 44) = Trim(Plan6.Cells(25, 6)) 'horas de moagem mensal mda 66
          Plan2.Cells(linha, 45) = Trim(Plan6.Cells(26, 6)) 'horas pedidas mensal mda 66
          Plan2.Cells(linha, 46) = Trim(Plan6.Cells(29, 6)) 'tempo de aproveitamento mensal mda 66
          Plan2.Cells(linha, 47) = Trim(Plan6.Cells(73, 6)) 'cana moida por hora efetiva mensal mda 66
          Plan2.Cells(linha, 48) = Trim(Plan6.Cells(72, 6)) 'cana moida mensal mda 66

          Plan2.Cells(linha, 50) = Trim(Plan6.Cells(12, 7)) 'horas de moagem anual geral
          Plan2.Cells(linha, 51) = Trim(Plan6.Cells(13, 7)) 'horas pedidas ponderada anual geral
          Plan2.Cells(linha, 52) = Trim(Plan6.Cells(16, 7)) 'tempo de aproveitamento anual geral
          Plan2.Cells(linha, 53) = Trim(Plan6.Cells(32, 7)) 'cana moida por hora efetiva anual geral
          Plan2.Cells(linha, 54) = Trim(Plan6.Cells(31, 7)) 'cana moida anual geral
          Plan2.Cells(linha, 55) = Trim(Plan6.Cells(19, 7)) 'horas de moagem anual mda 54
          Plan2.Cells(linha, 56) = Trim(Plan6.Cells(20, 7)) 'horas pedidas anual mda 54
          Plan2.Cells(linha, 57) = Trim(Plan6.Cells(23, 7)) 'tempo de aproveitamento anual mda 54
          Plan2.Cells(linha, 58) = Trim(Plan6.Cells(49, 7)) 'cana moida por hora efetiva anual mda 54
          Plan2.Cells(linha, 59) = Trim(Plan6.Cells(48, 7)) 'cana moida mensal anual 54
          Plan2.Cells(linha, 60) = Trim(Plan6.Cells(25, 7)) 'horas de moagem mensal anual 66
          Plan2.Cells(linha, 61) = Trim(Plan6.Cells(26, 7)) 'horas pedidas mensal anual 66
          Plan2.Cells(linha, 62) = Trim(Plan6.Cells(29, 7)) 'tempo de aproveitamento anual mda 66
          Plan2.Cells(linha, 63) = Trim(Plan6.Cells(73, 7)) 'cana moida por hora efetiva anual mda 66
          Plan2.Cells(linha, 64) = Trim(Plan6.Cells(72, 7)) 'cana moida mensal anual 66
    
      End If

End Sub

silva_jmp

 
Postado : 09/11/2013 7:24 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Troque:

Plan2.Cells(linha, 17) = ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP([-16],Parâmetros!R2C4:R367C8,2,)),"""",VLOOKUP([-16],Parâmetros!R2C4:R367C8,2,)))"

por

Plan2.Cells(linha, 17) = "=IFERROR(VLOOKUP([@Data]*1,Parâmetros!D2:E400,2,0),"""")"

Se vc quiser eliminar as fórmulas troque:

 End If

End Sub

por

End If

Sheets("Boletim Geral").Select
    Range("Q3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A1").Select

End Sub

Me avise pois sou meio lesado com macros.

Aqui funcionou.

Abs,

 
Postado : 09/11/2013 10:52 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Matrix bom dia,

Troquei pelo código abaixo, mas não funcionou, deu a mensagem "Erro de tempo de execução '1004' Erro de definição de aplicativo ou de definição de objeto"

Plan2.Cells(linha, 17) = "=IFERROR(VLOOKUP([@Data]*1,Parâmetros!D2:E400,2,0),"""")"

Coloquei também o código abaixo, o resultado deveria ser a descrição da semana correspondente a data ou ficaria vazia? Pois a célula ficou vazia, portanto não deu certo.

End If
      
      Sheets("Boletim Geral").Select
      Range("Q3").Select
      Range(Selection, Selection.End(xlDown)).Select
      Selection.Copy
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
      Application.CutCopyMode = False
      Range("A1").Select

End Sub

Será que a macro esta reconhecendo a data como data e não texto ou inverso?

silvajmp

 
Postado : 10/11/2013 5:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Cara,

Segue o que funcionou por aqui.

Depois me fale.

Abs,

 
Postado : 10/11/2013 7:23 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Matrix, não sei o que esta acontecendo, acho que o meu pacote office do meu notebook esta danificado, pois fiz o teste com o seu arquivo e deu a mesma mensagem "Erro de tempo de execução '1004' Erro de definição de aplicativo ou de definição de objeto", vou fazer o teste em outro PC para verificar se é o pacote office 2007 e já te falo.

As outras macros dos módulos 3 e 4 são outras opções para o mesmo resultado??

silvajmp

 
Postado : 10/11/2013 10:36 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Matrix fiz o teste em outro PC deu a mesma mensagem.

 
Postado : 10/11/2013 10:55 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Silva,

No meu roda, o que não significa muito já que no de outras pessoas pode não rodar também...

Talvez outros integrantes possam sanar a dúvida: tá rodando a macro ou não tá?

Cartas para a redação.

Abs,

 
Postado : 10/11/2013 10:39 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

MATRIX, blz, provisoriamente vou colocar as formulas nas células manualmente,vai pesar um pouco o arquivo, pois são muitas linhas, para atender a minha necessidade de emediato, mas vou procurar alternativas para resolver este problema.

Obrigado por enquanto.

silvajmp

 
Postado : 11/11/2013 8:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Não entendi se deseja "por " a formula na plnilha ou retornar o resultado, porem a formula deve ser
"=IF(ISERROR(VLOOKUP(RC[-16],Parâmetros!R[2]C[4]:R[367]C[8],2)),"""",VLOOKUP(RC[-16],Parâmetros!R[2]C[4]:R[367]C[8],2))"
se Deseja aplicar a formula em sua planilha via vba
Experimente assim:
Plan2.Cells(linha, 17).FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-8],Parâmetros!RC[-8]:R[365]C[-1],2)),"""",VLOOKUP(RC[-8],Parâmetros!RC[-8]:R[365]C[-1],2))"

 
Postado : 11/11/2013 9:25 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo obrigado novamente por me ajudar, na verdade eu quero que a macro me de somente o resultado, porém os dados devem ser buscados desta forma:

SE(ÉERROS(PROCV($A2;Parâmetros!$D$2:$H$367;2));"";PROCV($A2;Parâmetros!$D$2:$H$367;2))

A data na coluna A será o valor procurado;
O invervalo deverá ser sempre Parâmetros!D2:H367
O valor da resposta eu posso alterar conforme minha necessidade do intervalo, neste caso está na coluna 2.

silvajmp

 
Postado : 11/11/2013 11:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reginaldo consegui ajustar para minha necessidade, ficou assim:

Plan2.Cells(linha, 17).FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-16],Parâmetros!R1C4:R365C8,2)),"""",VLOOKUP(RC[-16],Parâmetros!R1C4:R365C8,2))"

Agora preciso que não apareça a formula na célula.

silvajmp

 
Postado : 11/11/2013 11:35 am