Usuário com melhor resposta
Fórmula para comparar o valor da célula e atribuir um valor a uma outra célula

Pergunta
-
Boa tarde pessoal!
Sou novato nessa área e estou precisando criar um botão no excel que quando ativado ele busque em uma tabela com o PROCV a cidade origem, destino distancia e tempo de um percurso. EX:
Essa seria a minha tabela que está em outra planilha da mesma pasta de trabalho onde eu teria meus dados
Cliente Origem Destino Km Tempo Previsto
Cliente1 (Ida) CidadeA CidadeB 200 02:15:00
Cliente1 (Volta) CidadeB CidadeA 200 02:15:00Na tabela onde seria utilizado esse botão conteria outros valores como data e outros detalhes.
Eu queria que quando o usuário preenchesse o nome do Cliente(Coluna G) e clicasse nesse botão, a macro comparasse o nome digitado com a tabela acima e preenchesse a origem(Coluna I), o destino (Coluna J), KM(Coluna V) e Tempo previsto (Coluna W).
Se possível fazer isso apenas uma vez, ou seja o usuário preenche todas as linhas da coluna de Cliente e quando ele clicar no botão a macro já faz de todas as linhas de uma vez só.
Eu consegui fazer para apenas uma linha com o seguinte código, porém como vocês podem ver está fixado as células diretamente na fórmula.
Private Sub CommandButton1_Click()
[I3].FormulaLocal = "=PROCV(G3;Plan3!A1:E5;2;0)"
[J3].FormulaLocal = "=PROCV(G3;Plan3!A1:E5;3;0)"
[V3].FormulaLocal = "=PROCV(G3;Plan3!A1:E5;4;0)"
[W3].FormulaLocal = "=PROCV(G3;Plan3!A1:E5;5;0)"
End SubPorém quando tentava colocar a fórmula SEERRO, deixando da seguinte maneira:
Private Sub CommandButton1_Click()
[I3].FormulaLocal = "=SEERRO(PROCV(G3;Plan3!A1:E5;2;0);"")"
[J3].FormulaLocal = "=SEERRO(PROCV(G3;Plan3!A1:E5;3;0);"")"
[V3].FormulaLocal = "=SEERRO(PROCV(G3;Plan3!A1:E5;4;0);"")"
[W3].FormulaLocal = "=SEERRO(PROCV(G3;Plan3!A1:E5;5;0);"")"
End SubE recebia a mensagem "Erro de definição de aplicativo ou de definição de objeto"
Tentei substituir o SEERRO por IFERROR, porém ficou na mesma.
Então resumindo, gostaria que vocês me ajudassem a aplicar a estrutura de repetição até a última linha que esteja preenchida, e também a tratar o erro com o SEERRO.
Muito obrigado.
- Editado Danilo.Hrq quarta-feira, 1 de agosto de 2012 10:27
Respostas
-
Para a fórmula I3, experimente digitá-la na janela de verificação imediata (Ctrl+G no VBE):
?=SEERRO(PROCV(G3;Plan3!A1:E5;2;0);"")
O VBA entende ela como:
=SEERRO(PROCV(G3;Plan3!A1:E5;2;0);")
Observe que a fórmula está errada (a aspas dupla no final está aparecendo apenas uma vez). Isso ocorre porque o símbolo " é especial no VBA, ou seja, é necessário representá-lo duas vezes seguidas numa string para ele aparecer um avez. Logo, se eu reescrever sua fórmula na janela imediata como:
?"=SEERRO(PROCV(G3;Plan3!A1:E5;2;0);"""")"
O VBA entenderá da forma que você deseja, que é:
=SEERRO(PROCV(G3;Plan3!A1:E5;2;0);"")
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Hezequias VasconcelosModerator quarta-feira, 12 de setembro de 2012 11:08
-
É possível entrar com uma fórmula num intervalo (isto é, em várias fórmulas de uma vez) utilizando o VBA. Para tal, você deverá alterar a propriedade FormulaR1C1 ou FormulaR1C1Local.
Para ver como isso acontece, entre no modo de gravação de macro. Em seguida, selecione mais de uma célula. Entre com uma fórmula qualquer e pressione Ctrl+Enter. Interrompa a gravação e veja o código.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Sugerido como Resposta Hezequias VasconcelosModerator terça-feira, 11 de setembro de 2012 15:42
- Marcado como Resposta Hezequias VasconcelosModerator quarta-feira, 12 de setembro de 2012 11:08
Todas as Respostas
-
Para a fórmula I3, experimente digitá-la na janela de verificação imediata (Ctrl+G no VBE):
?=SEERRO(PROCV(G3;Plan3!A1:E5;2;0);"")
O VBA entende ela como:
=SEERRO(PROCV(G3;Plan3!A1:E5;2;0);")
Observe que a fórmula está errada (a aspas dupla no final está aparecendo apenas uma vez). Isso ocorre porque o símbolo " é especial no VBA, ou seja, é necessário representá-lo duas vezes seguidas numa string para ele aparecer um avez. Logo, se eu reescrever sua fórmula na janela imediata como:
?"=SEERRO(PROCV(G3;Plan3!A1:E5;2;0);"""")"
O VBA entenderá da forma que você deseja, que é:
=SEERRO(PROCV(G3;Plan3!A1:E5;2;0);"")
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Hezequias VasconcelosModerator quarta-feira, 12 de setembro de 2012 11:08
-
Entendi Benzadeus, então quando eu precisar utilizar uma " como um string eu vou precisar representá-lo como "" para cada " que eu tiver.
Mas em relação a repetição, como eu faria para repetir esse comando até a última linha?
Desde já agradeço
- Editado Danilo.Hrq quarta-feira, 1 de agosto de 2012 11:37
-
-
Consegui adaptar o código sim, porém como você pode ver as células estão fixadas (I3, J3, V3, W3).
Eu queria que essa fórmula afetasse todas as células das colunas I, J, V e W, por isso estou falando da repetição.
O usuário iria digitar quantos clientes fossem necessários na coluna A, colocaria a data na coluna B e clicaria nesse botão e ele automaticamente já exibisse os valores das colunas I, J, V e W (Origem, Destino, Km e Tempo Previsto respectivamente). Esses valores estariam armazenados em uma outra planilha e eu encontraria com o PROCV.
Planilha de origem dos dados ( Onde irão estar todos os dados dos clientes e os percursos)
Cliente Origem Destino Km Tempo Previsto
Cliente1 (Ida) CidadeA CidadeB 200 02:15:00
Cliente1 (Volta) CidadeB CidadeA 200 02:15:00Planilha que o usuário irá utilizar (I, J, V e W: dados preenchidos automaticamente quando o usuário clicar no botão)
A B ... I J ... V W
Cliente Data ... Origem Destino ... KM Tempo previstoCliente1 (Ida) 02/08 ... CidadeA CidadeB ... 200 02:15:00
Pode haver casos de termos mais de 200 linhas nessa última planilha, por isso a repetição.
Obrigado
- Editado Danilo.Hrq sexta-feira, 3 de agosto de 2012 12:37
-
É possível entrar com uma fórmula num intervalo (isto é, em várias fórmulas de uma vez) utilizando o VBA. Para tal, você deverá alterar a propriedade FormulaR1C1 ou FormulaR1C1Local.
Para ver como isso acontece, entre no modo de gravação de macro. Em seguida, selecione mais de uma célula. Entre com uma fórmula qualquer e pressione Ctrl+Enter. Interrompa a gravação e veja o código.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Sugerido como Resposta Hezequias VasconcelosModerator terça-feira, 11 de setembro de 2012 15:42
- Marcado como Resposta Hezequias VasconcelosModerator quarta-feira, 12 de setembro de 2012 11:08