none
Fórmula para comparar o valor da célula e atribuir um valor a uma outra célula RRS feed

  • 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:00

    Na 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 Sub

    Poré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 Sub

    E 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
    terça-feira, 31 de julho de 2012 20:26

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

    terça-feira, 31 de julho de 2012 21:19
    Moderador
  • É 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

    segunda-feira, 6 de agosto de 2012 23:41
    Moderador

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

    terça-feira, 31 de julho de 2012 21:19
    Moderador
  • 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
    quarta-feira, 1 de agosto de 2012 10:18
  • Não entendi sua pergunta.

    Você entendeu como adaptar o código?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 1 de agosto de 2012 22:33
    Moderador
  • 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:00

    Planilha 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 previsto

    Cliente1 (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
    sexta-feira, 3 de agosto de 2012 12:36
  • É 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

    segunda-feira, 6 de agosto de 2012 23:41
    Moderador