Notifications
Clear all

Combinar funções ou criar no VBA?

13 Posts
3 Usuários
0 Reactions
1,128 Visualizações
(@anderds)
Posts: 0
New Member
Topic starter
 

Olá pessoal,

Então tenho uma planilha com relatório de ligações organizado da seguinte forma:

1 coluna com os códigos dos clientes
30 colunas com os dias do mês
700 linhas onde será inserido uma informação referente ao contato, neste caso na intersecção entre o código e a data do contato é inserido esta informação.
Ex.: cliente 0001 na coluna 1, contato realizado no dia 15 que está na coluna 20 e o campo a ser preenchido é a linha 4. Neste campo preencho com a sigla RC(retornará compra). Ou seja na interseção entre linha onde está o cod do cliente e a coluna da respectiva data este valor "RC" será inserido.

Mas agora entra o desafio que não consegui resolver: numa segunda planilha que servirá de base eu tenho os códigos do cliente em uma coluna e a data da entrada de seus pedidos em outra coluna. Preciso que: a planilha de ligações busque nesta base a data de entrada do pedido e o código do cliente e confronte com o código do cliente e a data que foi inserido o "RC", ao localiza-la, se a data de inserção do RC for menor ou igual a data de entrada do pedido presente na base ele retorne "PMC" (positivação mediante contato), em caso negativo "PE"(positivação espontânea), se não houver entradas de pedido e/ou RCs retorne "em branco".

No caso a grande dificuldade que estou enfrentando é a do posicionamento, o range e a precisão da busca. Na planilha de ligações tenho uma coluna com 700 clientes, onde seria feito uma pesquisa vertical com a base para encontrar a data de entrada dos pedidos e a partir daí buscar o "RC" em 30 intersecções ao longo de 30 dias ou seja são 30 celulas ordenadas horizontalmente para cada cliente, onde a ref que indica qual a data são os 30 dias do mês ordenados horizontalmente na linha anterior ao primeiro cod de cliente presente em uma das colunas a esquerda e depois retornar o "PMC", "PE" e "".

Estive pesquisando sobre o VBA e pensei que talvez criar algumas funções pode se tornar uma eventual solução, no entanto são tanto parametros, argumentos e condições que francamente minha cabeça deu um nó e já nem sei por onde começar.

Estou pondo uma imagem real da planilha de ligações, apenas alterei os dados dos clientes, e uma imagem da base, que na verdade é bem diferente mas e idéia é apenas mostrar a disposição das informações em cada uma delas.


Talvez pela minha inexperiência não esteja vendo algo óbvio ou simplesmente também esteja querendo algo absurdo e inviável, mas conto com vocês para me dar uma forcinha, todas as sugestões, críticas e instruções serão mais que bem vindas. Desde já agradeço a todos!

Grande abraço galera!

 
Postado : 13/06/2014 5:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

AnderDS,

Boa noite!

Tem como disponibilizar o seu arquivo compactado para facilitar?
Poderá inserir apenas alguns dados fictícios.

Att,

 
Postado : 13/06/2014 5:34 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Cara,

Pela tua descrição, eu acho que dá pra resolver com SOMARPRODUTO()

Porém, como disse o Marciel, vc pode disponibilizar o arquivo e já destacar quais são os fatores a considerar? Vai facilitar muito.

 
Postado : 13/06/2014 5:43 pm
(@anderds)
Posts: 0
New Member
Topic starter
 

Primeiramente muito obrigado pela força e atenção Marciel e Gilmar, estou enviando o arquivo para que possam verificar.

Abraços

 
Postado : 13/06/2014 6:11 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pode experimentar
=SEERRO(SE(INDIRETO(ENDEREÇO(14;CORRESP("RC";INDIRETO("'Relatorio de Ligações'!A"&CORRESP(A2;'Relatorio de Ligações'!$A$15:$A$28;0)+14&":AN"&CORRESP(A2;'Relatorio de Ligações'!$A$15:$A$28;0)+14);0);;;"Relatorio de Ligações"))<=J2;"PMC";"PE");"")
Porem irá procurar sempre o primeiro RC, mesmo se houver + de um na mesma linha

 
Postado : 13/06/2014 6:36 pm
(@anderds)
Posts: 0
New Member
Topic starter
 

Pode experimentar
=SEERRO(SE(INDIRETO(ENDEREÇO(14;CORRESP("RC";INDIRETO("'Relatorio de Ligações'!A"&CORRESP(A2;'Relatorio de Ligações'!$A$15:$A$28;0)+14&":AN"&CORRESP(A2;'Relatorio de Ligações'!$A$15:$A$28;0)+14);0);;;"Relatorio de Ligações"))<=J2;"PMC";"PE");"")
Porem irá procurar sempre o primeiro RC, mesmo se houver + de um na mesma linha

Reinaldo,

Boa noite!

Caraa, deu certo sim, o fato de buscar o primeiro RC da linha não tem problema, pois o primeiro contato seria o que realmente contabilizariamos para confrontar com o fluxo de entrada de pedidos por cliente mediante tal contato.
Meu velho estou boquiaberto, resolvestes super rápido,estou a uma semana batendo cabeça e nem em sonho imaginei combinar tais funções. Pra ser sincero estou quebrando a cabeça aqui para entender a sequência lógica dela e entender "os por ques" de cada parâmetro, pois tem funções que nem conhecia e outras já conhecidas nem consegui associa-las para obter este resultado; depois de desmistificar a fórmula vou aplicar nas planilhas reais, hehe. Show mesmo! Muito obrigado Reinaldo.

Meus agradecimentos a todos pela atenção e força na resolução.

Grande abraço e um ótimo final de semana.

 
Postado : 13/06/2014 7:36 pm
(@anderds)
Posts: 0
New Member
Topic starter
 

Agora que voltei a 'fuçar' na minha pasta, notei o seguinte: ela retorna o PRC independente se a data de inserção do RC for maior ou menor em relação a data de entrada do pedido constante na base, ou seja, se houver RC em qualquer posição na linha ela retorna PRC.

 
Postado : 14/06/2014 1:49 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pode fornecer maiores detalhes?

 
Postado : 14/06/2014 9:38 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Talvez assim dê certo:

=SEERRO(SE(J2>PROC("RC";DESLOC('Relatorio de Ligações'!$J$14;CORRESP('Entrada de pedidos'!B2;'Relatorio de Ligações'!B15:B28;0);0;1;30);'Relatorio de Ligações'!J14:AM14);"PE";"PMC");"")
 
Postado : 15/06/2014 10:54 am
(@anderds)
Posts: 0
New Member
Topic starter
 

Olá Reinaldo,

Na verdade aplicando no exemplo(planilha em anexo) como você orientou e funciona ok, mas quando estou fazendo na planilha real, creio que eu esteja me confundido com a sequência lógica das condições e argumentos. Usei a opção de avaliar fórmulas da galeria de auditoria de fórmulas,e mesmo assim ainda fiquei confuso. Me ajuda a entender a seqência lógica que utilizastes, em especial os argumentos em negrito abaixo:

=SEERRO(SE(INDIRETO(ENDEREÇO(14;CORRESP("RC";INDIRETO("'Relatorio de Ligações'!A"&CORRESP(A2;'Relatorio de Ligações'!$A$15:$A$28;0)+14&":AN"&CORRESP(A2;'Relatorio de Ligações'!$A$15:$A$28;0)+14);0);;;"Relatorio de Ligações"))<=J2;"PMC";"PE");"")

Obrigado

 
Postado : 15/06/2014 11:08 am
(@anderds)
Posts: 0
New Member
Topic starter
 

Talvez assim dê certo:

=SEERRO(SE(J2>PROC("RC";DESLOC('Relatorio de Ligações'!$J$14;CORRESP('Entrada de pedidos'!B2;'Relatorio de Ligações'!B15:B28;0);0;1;30);'Relatorio de Ligações'!J14:AM14);"PE";"PMC");"")

Fala grande Gilmar, td certo?

Então, esta acontecendo a mesma situação. ele retorna o PMC mediante qualquer RC na linha, sem confrontar as datas dos RCs da planilha 'Relatorio de ligações' e a data de entrada do pedido da planilha 'Entrada de pedidos'. Dá uma olhada na pasta em anexo, eu coloquei tdos os RCs em um unico dia na planilha de ligações para ilustrar melhor.
Todos Rcs estao no dia 08/06, sendo assim todos os pedidos q entraram antes disso deveriam retornar PE e após isso PMC.

 
Postado : 15/06/2014 3:55 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

E tinha esqecido de travar as células, tente agora:

=SEERRO(SE(J2>PROC("RC";DESLOC('Relatorio de Ligações'!$J$14;CORRESP('Entrada de pedidos'!B2;'Relatorio de Ligações'!$B$15:$B$28;0);0;1;30);'Relatorio de Ligações'!$J$14:$AM$14);"PE";"PMC");"")
 
Postado : 15/06/2014 6:22 pm
(@anderds)
Posts: 0
New Member
Topic starter
 

haha, nem eu me toquei de usar o F4 nos intervalos ali. Fechou!
Valeu Gilmar!!!
abraços

 
Postado : 15/06/2014 7:04 pm