Página 1 de 1
Procurar dado na mesma Sheet com critério e preencher célula
Enviado: 06 Mar 2020 às 21:32
por xmiguelx
Olá pessoal,
Preciso de uma ajuda, pois realizo uma operação que em sheets diferente funciona, porém na mesma eu não estou conseguindo.
Basicamente é a fórmula Se e Prov, porém em comando vba.
Para facilitar, gerei uma planilha de exemplo onde deixei na coluna V e W as fórmula que estou tentando aplicar em vba na coluna R.
A nível de aprendizado, deixei dois botões, na planilha.
Referencia: onde ele preenche conforme a ficha informada na R1 e
Geral: onde ele preenche em toda coluna R seguindo os critérios.
Agradeço quem possa ajudar.
Re: Procurar dado na mesma Sheet com critério e preencher cé
Enviado: 06 Mar 2020 às 22:36
por osvaldomp
xmiguelx escreveu:Basicamente é a fórmula Se e Prov, porém em comando vba.
Você quer que o código coloque na coluna R a fórmula ou o resultado da fórmula ?
Para facilitar, gerei uma planilha de exemplo onde deixei na coluna V e W as fórmula que estou tentando aplicar em vba na coluna R.
Como você pretende colocar duas fórmulas na mesma célula ? Colunas V e W na coluna R, não entendi
Geral: onde ele preenche em toda coluna R seguindo os critérios.
Não há macro vinculada ao botão GERAL
.
Re: Procurar dado na mesma Sheet com critério e preencher cé
Enviado: 06 Mar 2020 às 23:43
por xmiguelx
Olá Osvaldo, segue abaixo retorno para suas perguntas:
osvaldomp escreveu:xmiguelx escreveu:Basicamente é a fórmula Se e Prov, porém em comando vba.
Você quer que o código coloque na coluna R a fórmula ou o resultado da fórmula ?
@xmiguelx: Somente o Resultado.
Para facilitar, gerei uma planilha de exemplo onde deixei na coluna V e W as fórmula que estou tentando aplicar em vba na coluna R.
Como você pretende colocar duas fórmulas na mesma célula ? Colunas V e W na coluna R, não entendi
@xmiguelx: Somente o Resultado que será conforme o botão que for apertado.
Geral: onde ele preenche em toda coluna R seguindo os critérios.
Não há macro vinculada ao botão GERAL
.
@xmiguelx: Não, porque estava tentando fazer primeiro a Macro do Botão Referencia. Inclusive a Macro do botão de Referencia não está funcionando conforme eu esperava.
Re: Procurar dado na mesma Sheet com critério e preencher cé
Enviado: 07 Mar 2020 às 14:47
por osvaldomp
Olá, Miguel.
Veja se o código abaixo atende. Vincule os dois botões à macro formada por esse código.
Código: Selecionar todosSub InsereResultados()
Dim LR As Long
LR = Cells(Rows.Count, 2).End(3).Row
If ActiveSheet.Buttons(Application.Caller).Caption = "REFERENCIA" Then
Range("R4:R" & LR).Formula = "=IF(AND(tbl_lançtos[@[TIPO DE LANÇTO]]=""ESTORNO DE PROVISÃO"",tbl_lançtos[@[Nº DA FICHA]]=$R$1),VLOOKUP(S4,D:F,3,0),""N/AA"")"
Else: Range("R4:R" & LR).Formula = "=IF(tbl_lançtos[@[TIPO DE LANÇTO]]=""ESTORNO DE PROVISÃO"",VLOOKUP(S4,D:F,3,0),""N/AA"")"
End If
Range("R4:R" & LR).Value = Range("R4:R" & LR).Value
End Sub
obs. é recomendável instalar o código acima em um módulo comum (no editor de VBA menu Inserir / Módulo) e não no módulo da planilha, onde está o código atual
Procurar dado na mesma Sheet com critério e preencher célula
Enviado: 08 Mar 2020 às 08:56
por xmiguelx
Olá Osvaldo,
Aplicando á fórmula igual você passou funcionou sim, e obrigado pela dica.
Porém a nível de aprendizado estive fazendo várias pesquisas e consegui fazer dois comandos, o de referencia que é apenas para ficha informada está funcionando rápido, porem o comando Geral onde ele repassa sobre todas as fichas está muito lento.
REFERENCIA
Código: Selecionar todosSub referencia()
Dim Cont As Long
Dim Res As Variant
With Sheets("02 - DESENVOLVIMENTO")
For Cont = 4 To .Range("B30000").End(xlUp).Row
If .Range("R1") = .Range("B" & Cont).Value And _
.Range("M" & Cont).Value = "ESTORNO DE PROVISÃO" Then
Res = Application.Match(.Range("S" & Cont).Value, .Range("d1:d30000"), 0)
If Not IsError(Res) Then
.Range("R" & Cont).Value = .Range("F" & Res).Value
Else
.Range("R" & Cont).Value = "N/AA"
End If
End If
Next Cont
End With
End Sub
GERAL
Código: Selecionar todosSub GERAL()
Dim Cont As Long
Dim Res As Variant
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
With Sheets("02 - DESENVOLVIMENTO")
For Cont = 4 To .Range("B30000").End(xlUp).Row
If .Range("M" & Cont).Value = "ESTORNO DE PROVISÃO" Then
Res = Application.Match(.Range("S" & Cont).Value, .Range("d1:d30000"), 0)
If Not IsError(Res) Then
.Range("R" & Cont).Value = .Range("F" & Res).Value
Else
.Range("R" & Cont).Value = "N/AA"
End If
Else
.Range("R" & Cont).Value = "N/AA"
End If
Next Cont
End With
Application.Calculation = xlCalculationAutomatic
Application.DisplayStatusBar = True
Application.ScreenUpdating = True
End Sub
Re: Procurar dado na mesma Sheet com critério e preencher cé
Enviado: 08 Mar 2020 às 12:10
por osvaldomp
Olá, Miguel.
1. tomando por base a nomenclatura utilizada pela MS para o Office, o que eu sugeri é um código escrito em linguagem VBA, não é uma fórmula
2. o seu código referencia está rodando rápido porque ele não executa tudo o que deveria. Limpe a coluna R e rode aquele código. Note que somente foi preenchido o intervalo R3077:R3085, isso porque está faltando um comando Else no If externo para inserir "N/AA". Inclua também Application.ScreenUpdating
3. para diminuir o tamanho do código você poderia juntar os dois Ifs em um apenas, utilizando o conectivo And, não sei se alteraria o tempo de execução
4. uma forma de diminuir o tempo de execução dos dois códigos é restringir o intervalo de busca da função Match ao intervalo que contém dados, pois a tabela contém dados até a linha 3093 e no entanto a função busca até a linha 30.000; para restringir você pode utilizar uma variável que represente a última linha com dados, por exemplo veja a variável LR no código que eu sugeri, e aí coloque:
For Cont = 4 To LR
e também
.Range("D4:D" & LR)