Acionar Macro em uma formula

É possível acionar macro através de formula.

Explicando a necessidade:
Planilha enorme com milhares de PROCV e poucas resposta, a maioria das respostas é não encontrada, portanto ="" (branco).

Pensei se resposta não encontrada no lugar de colocar “” (branco) fosse acionada uma macro para limpar a célula.
Os dados são fixos, só serão procurados uma vez, não haverá necessidade de recalculo.

Desta maneira respostas não úteis, as células serias limpas, eliminando a formula para aliviar o arquivo.

Boa tarde, poste uma planilha exemplo para melhor entendimento.

Ola @Julio, estou tentando ajudar o @Aldo, como ele disse o arquivo tem todas as linhas do Calc (1048576). A formula teria esta lógica: =Se($A2=B$1;$A2;"") o problema é a quantidade de células em 256 colunas. Pois mesmo que a informação seja “” (branco) a fórmula fica carregada na planilha. O que havia pensado seria em caso negativo acionaria uma Macro ou Function para deletar a formula. Teoricamente iria copiando a formula em espaços menores e só ficaria as com informações úteis.

@Gilberto Schiavinatto, o que é possível é criar uma função no Basic para ser usada na célula. O problema é que assim haveriam milhares de chamadas da macro/function e o desempenho ficaria comprometido. Então, acredito que o melhor é construir uma rotina, acionada por botão ou menu, que percorra as células e preencha as informações. Mas aí seria necessário ver um exemplo ilustrativo deste caso.

Outra possibilidade, a depender do que é preciso, é usar fórmulas matriciais. Nesta resposta @Olivier dá um ótimo esclarecimento.

Ola @Grafeno, acabei chegando na sua dica, fiz uma rotina que trabalha em uma coluna por vez, no momento estou executando, mas tá um caroço +/- 5 min por coluna, e muda para a próxima sozinha e recomeça o processo.

@Gilberto Schiavinatto, são 256 colunas com 1048576 linhas? Desse jeito vai ficar pesado/lento mesmo. Um volume de dados muito grande, talvez fosse a hora de pensar migrar isso para um Banco de Dados.

Uma pergunta @Gilberto Schiavinatto , não seria melhor a macro simplesmente passar a informação em vez de criar o procedimento copiar e colar?
por exemplo:
oPlan.getCellRangeByName(col, lin).String = oPlan1.getCellRangeByName(col, lin).String (pode ser Value tbm)

Dessa forma elimina 02 operações na execução da macro

@Conras, entendi sua colocação, mas fiz pelo gravador de Macro e este tipo de instrução não aparece.

Você teria um exemplo pratico de como usar, guardarei para futuro uso.

@Gilberto Schiavinatto , segue um arquivo que estou em fase final de aplicação (enviado ao seu e-mail). No módulo RNC contém as macros que estou falando. Caso sua tela abra em “tela cheia”, clique no botão “manutenção”. Enviado outro arquivo também para ver mais simples

Se o PROCV retende devolver um valor existente (ou não) numa massa de dados muito grande, eu investiria alguns minutos em avaliar funções de banco de dados tipo BDEXTRAIR(). Não testei.

@JúnioVieira, @Grafeno, @Conras, @ohallot

Encontrei uma alternativa, a saída é criar uma Function, que tenha em sua execução as células desejadas para acionar a Macro.

A Function abaixo:

Function XPTO( a, b )
XPTO = a * b
	Call MacroExecutar
End Function

Quando for efetuada alteração nas células envolvida, gera uma execução na function e por sua vez aciona a MacroExecutar.

A célula com a Function pode ficar em qualquer lugar da planilha, não é necessária ter informação útil para a planilha.

Exemplo: em uma célula qualquer coloco a function =XPTO(C4;F7), então quando uma das células C4 ou F7 sofrer alteração a MacroExecutar será acionada.

Olá @Gilberto Schiavinatto

Ótima ideia, porém, isso é mais ou menos o que o @Grafeno falou sobre ter uma chamada através de botão ou menu para uma rotina que percorra os dados.

@Conras, sim sugestão do @Grafeno, só quis documentar uma maneira de usar, sabendo-se que se for milhares, vai ter problema. É que cai nesta situação, e é pontual, então fica pratico.

@Gilberto Schiavinatto … realmente, muitos dados fica inviável a utilização do Cal e do Excel tbm…estou tenho este problema em um arquivo de um cliente que já está próximo dos 10M com mais de 350 abas. Estou migrando para access (base) por enquanto.

Ola @Conras, não sei como esta estruturado seu arquivo, mas já vi diversos casos que o usuário cria dezenas de abas individual por clientes, com inúmeras informações repetitivas, a solução que indico é criar una só onde escolhesse o Cliente e a aba traz todos os dados/movimentações do cliente.

@Gilberto Schiavinatto Cada aba é um item diferente. Neste arquivo é um controle de equipamentos onde contém dados do equipamentos e resultados obtidos. Cada equipamento é diferente um do outro.

Ok @Conras, sucesso.