Notifications
Clear all

Macro similar ao PROCV

11 Posts
2 Usuários
0 Reactions
1,718 Visualizações
(@gustavoat)
Posts: 6
Active Member
Topic starter
 

Boa Noite a todos!
Estou precisando de ajuda para fazer uma macro onde eu tenho uma base com várias linhas e colunas (vide anexo) e preciso fazer com que a macro percorra uma coluna específica e veja se a condição é verdadeira. Caso seja verdadeira precisaria criar duas linhas em branco abaixo da linha analisada copiando praticamente toda a linha e mudando apenas alguns detalhes.

Para facilitar estou anexando a planilha e referenciando as colunas.
A Macro precisaria percorrer a coluna "Tipo" (coluna AF), caso ache a palavra desejada ela criaria duas linhas em branco abaixo e copiaria nas duas a linha original toda mudando apenas algumas colunas específicas. As colunas mudadas seriam da N até a J (são números) multiplicando os valores da linha original em por exemplo 70% e 30% (este valor eu assumiria) para chegar exatamente ao valor da linha original. Além disso a coluna AJ abriria em dois tipos diferentes e a linha original seria deletada.

Seria possível fazer isto? Não sei se consegui explicar muito detalhadamente.

Obrigado!

 
Postado : 20/08/2015 4:01 pm
(@sonnel)
Posts: 9
Active Member
 

"caso ache a palavra desejada ela criaria duas linhas em branco abaixo e copiaria nas duas a linha original toda mudando apenas algumas colunas específicas."

Criaria duas linhas em branco abaixo da linha onde foi encontrada a palavra ? Ou criaria abaixo de todas as linhas?

"As colunas mudadas seriam da N até a J (são números) multiplicando os valores da linha original em por exemplo 70% e 30% (este valor eu assumiria)"

AS colunas seriam da N até a J ou da N até a U? O valor primeira linha seria multiplicado por 70% e da segunda por 30%?

"Além disso a coluna AJ abriria em dois tipos diferentes e a linha original seria deletada."

A coluna AJ teria dois tipos diferentes como, por exemplo, "Aço tipo 1" e "Aço tipo 2"?

A palavra desejada, os tipos diferentes e os valores multiplicadores seriam iguais aqueles dos intervalos "A14:C15" e "E14:G15"? Esses seriam os parâmetros para pesquisa e atualização de valores?

Os intervalos com parâmetros "A14:C15" e "E14:G15" poderiam ser mudados para cima da tabela?

 
Postado : 20/08/2015 8:39 pm
(@gustavoat)
Posts: 6
Active Member
Topic starter
 

Sonnel, primeiramente obrigado pela resposta! Respondendo seus questionamentos:

- As duas linhas em branco seriam abaixo da linha onde a palavra foi encontrada.

- As colunas de números alterados realmente seriam da N até U. E exatamente isso, a primeira multiplicada por 70% e a segunda por 30%. A questão é que terei uma lista de palavras para serem encontradas e dependendo da palavra o fator multiplicador muda, mas isso eu poderia inputar no código da macro fazendo vários IFs, certo?

- É exatamente isso que você disse, a palavra desejada, os tipos diferentes e os valores multiplicadores seriam iguais aqueles dos intervalos "A14:C15" e "E14:G15"!
Portanto caso a Macro ache "RTY213" na coluna AF, ela criaria duas linhas em branco abaixo dela e na coluna AJ em uma das linhas apareceria Aço tipo 1 e na segunda Aço tipo 2 e da coluna N até U seria multiplicada pelos fatores de 70% na primeira linha e 30% na segunda. Feito isso a linha original seria excluída para que os valores não ficassem duplicados.

Espero que tenha conseguido esclarecer.

Desde já agradeço a ajuda!

 
Postado : 21/08/2015 7:40 am
(@sonnel)
Posts: 9
Active Member
 

- As colunas de números alterados realmente seriam da N até U. E exatamente isso, a primeira multiplicada por 70% e a segunda por 30%. A questão é que terei uma lista de palavras para serem encontradas e dependendo da palavra o fator multiplicador muda, mas isso eu poderia inputar no código da macro fazendo vários IFs, certo?

Não seria melhor dispor a lista de palavras em uma planilha (Plan) em separado? Como se fosse um tabela?

Por exemplo, colocar as palavras dos intervalos "A14:C15" e "E14:G15" em intervalos "A2:C3" e "A4:C5'?

Se você colocar as palavras em uma planilha(Plan) em separado e em formato de tabela, a macro poderia atualizar várias linhas de uma só vez.

Portanto caso a Macro ache "RTY213" na coluna AF, ela criaria duas linhas em branco abaixo dela e na coluna AJ em uma das linhas apareceria Aço tipo 1 e na segunda Aço tipo 2 e da coluna N até U seria multiplicada pelos fatores de 70% na primeira linha e 30% na segunda.

Constatei que o tipo "RTY213" aparece 2 vezes na planilha. O tipo "MK432" aparece 3 vezes. Isso significa que em caso de atualização, o tipo "RTY213" geraria 4 linhas novas e o tipo "MK432" geraria 6 linhas novas?

A tabela da planilha "BASE PE" está ordenada ou tem ordenação por alguma das colunas? Se está ou tem, qual seria(m) a(s) coluna(s) ordenada(s)?

 
Postado : 21/08/2015 4:52 pm
(@gustavoat)
Posts: 6
Active Member
Topic starter
 

Não seria melhor dispor a lista de palavras em uma planilha (Plan) em separado? Como se fosse um tabela?

Por exemplo, colocar as palavras dos intervalos "A14:C15" e "E14:G15" em intervalos "A2:C3" e "A4:C5'?

Se você colocar as palavras em uma planilha(Plan) em separado e em formato de tabela, a macro poderia atualizar várias linhas de uma só vez.

Poderia ser sim! Na verdade coloquei do jeito que está só como exemplo porque nem pensei em deixar no meio da base de dados. A ideia é deixar em uma aba separada ou colocar dentro do código da Macro.

Constatei que o tipo "RTY213" aparece 2 vezes na planilha. O tipo "MK432" aparece 3 vezes. Isso significa que em caso de atualização, o tipo "RTY213" geraria 4 linhas novas e o tipo "MK432" geraria 6 linhas novas?

A tabela da planilha "BASE PE" está ordenada ou tem ordenação por alguma das colunas? Se está ou tem, qual seria(m) a(s) coluna(s) ordenada(s)?

Exatamente, gerariam esta quantidade de linhas sendo duas a duas abaixo de cada item que achar.
E a tabela não tem ordenação alguma, ela é aleatória mesmo.

 
Postado : 21/08/2015 6:10 pm
(@gustavoat)
Posts: 6
Active Member
Topic starter
 

Não seria melhor dispor a lista de palavras em uma planilha (Plan) em separado? Como se fosse um tabela?

Por exemplo, colocar as palavras dos intervalos "A14:C15" e "E14:G15" em intervalos "A2:C3" e "A4:C5'?

Se você colocar as palavras em uma planilha(Plan) em separado e em formato de tabela, a macro poderia atualizar várias linhas de uma só vez.

Poderia ser sim! Na verdade coloquei do jeito que está só como exemplo porque nem pensei em deixar no meio da base de dados. A ideia é deixar em uma aba separada ou colocar dentro do código da Macro.

Constatei que o tipo "RTY213" aparece 2 vezes na planilha. O tipo "MK432" aparece 3 vezes. Isso significa que em caso de atualização, o tipo "RTY213" geraria 4 linhas novas e o tipo "MK432" geraria 6 linhas novas?

A tabela da planilha "BASE PE" está ordenada ou tem ordenação por alguma das colunas? Se está ou tem, qual seria(m) a(s) coluna(s) ordenada(s)?

Exatamente, gerariam esta quantidade de linhas sendo duas a duas abaixo de cada item que achar.
E a tabela não tem ordenação alguma, ela é aleatória mesmo.

 
Postado : 21/08/2015 6:12 pm
(@sonnel)
Posts: 9
Active Member
 

Exatamente, gerariam esta quantidade de linhas sendo duas a duas abaixo de cada item que achar.
E a tabela não tem ordenação alguma, ela é aleatória mesmo.

Se a tabela é aleatória e não tem ordenação, as duas novas linhas geradas para cada tipo não poderiam ser adicionadas no final da tabela?
E a linha original simplesmente excluída?

Funcionaria assim (exemplo):

1) a linha do tipo "RTY213" é localizada na tabela, na coluna "AF";
2) a linha é copiada depois da última linha existente na tabela;
3) é feita a multiplicação dos valores (70%) nas colunas "N" a "U" e o segmento ("Aço tipo 1") é atualizado na coluna "AJ";
4) a linha é copiada novamente após a nova linha da tabela;
5) é feita a multiplicação dos valores (30%) nas colunas "N" a "U" e o segmento ("Aço tipo 2") é atualizado na coluna "AJ";
6) a linha original do tipo "RTY213" é excluída;

Como a tabela não tem ordenação parece não ser preciso que as duas novas linhas sejam incluída logo após a linha original.
A não ser que alguma outra necessidade que não foi explicitada exija essa condição.
Minha interpretação está correta?

 
Postado : 21/08/2015 8:11 pm
(@gustavoat)
Posts: 6
Active Member
Topic starter
 

Se a tabela é aleatória e não tem ordenação, as duas novas linhas geradas para cada tipo não poderiam ser adicionadas no final da tabela?
E a linha original simplesmente excluída?

Funcionaria assim (exemplo):

1) a linha do tipo "RTY213" é localizada na tabela, na coluna "AF";
2) a linha é copiada depois da última linha existente na tabela;
3) é feita a multiplicação dos valores (70%) nas colunas "N" a "U" e o segmento ("Aço tipo 1") é atualizado na coluna "AJ";
4) a linha é copiada novamente após a nova linha da tabela;
5) é feita a multiplicação dos valores (30%) nas colunas "N" a "U" e o segmento ("Aço tipo 2") é atualizado na coluna "AJ";
6) a linha original do tipo "RTY213" é excluída;

Como a tabela não tem ordenação parece não ser preciso que as duas novas linhas sejam incluída logo após a linha original.
A não ser que alguma outra necessidade que não foi explicitada exija essa condição.
Minha interpretação está correta?

Sonnel, você entendeu perfeitamente a dinâmica do processo, é exatamente isso!
Sou totalmente leigo em questão de VBA, mas tenho muita curiosidade e fiquei tentando através de apostilas e ajuda de páginas na internet fazer algo deste tipo rodar. Consegui, mas de uma maneira que não acho ser a ideal, pois conforme citei em um dos meus comentários, coloquei um IF para cada palavra que desejo procurar, além dos fatores de multiplicação de cada palavra no próprio código. O detalhe é que serão várias palavras, pois a base original terá milhares de linhas.

 
Postado : 21/08/2015 8:56 pm
(@sonnel)
Posts: 9
Active Member
 

Para facilitar a criação e manutenção da macro, sugeriria evitar o uso de células mescladas. A tabela de tipos para atualização poderia ter o seguinte layout:

 
Postado : 22/08/2015 9:29 am
(@sonnel)
Posts: 9
Active Member
 

Considere também a precisão dos cálculos das células com valores númericos (colunas N até U) após multiplicar pelos fatores (ex: 70% e 30%).

Você já experimentou criar duas linhas a partir de uma linha original e somou os valores multiplicados(por 70% e 30%) para ver se batem com o valor original? Pode haver divergência para maior ou para menor? A divergência, se existir, é relevante? Se for relevante, como você a trataria?

 
Postado : 22/08/2015 10:09 am
(@gustavoat)
Posts: 6
Active Member
Topic starter
 

Para facilitar a criação e manutenção da macro, sugeriria evitar o uso de células mescladas. A tabela de tipos para atualização poderia ter o seguinte layout:

O layout pode ser desta maneira sem problema alguma.

Você já experimentou criar duas linhas a partir de uma linha original e somou os valores multiplicados(por 70% e 30%) para ver se batem com o valor original? Pode haver divergência para maior ou para menor? A divergência, se existir, é relevante? Se for relevante, como você a trataria?

Já fiz sim e não dá problema, afinal somando os dois temos 100%. E de qualquer maneira caso haja divergência será tão pequena que não se torna relevante.

 
Postado : 22/08/2015 11:15 am