Existe uma função que faz o oposto deFORMULATEXT
Por exemplo no Cell B2
eu tenho:
='[Workshop Schedule 2020.xlsx]Lisburn'!D7
Em C2
i estou usando FORMULATEXT
e REPLACE
, para substituir LISBURN por CANNOCK:
=REPLACE(FORMULATEXT(B2),32,7,"CANNOCK")
Que retorna o abaixo como uma string.
='[Workshop Schedule 2020.xlsx]CANNOCK'!D7
Agora quero usar essa string como uma fórmula. Não consigo usar INDIRECT
, pois aponta para uma pasta de trabalho externa.
Você poderia criar uma função definida pelo usuário como:
Portanto, se A1 contiver a string de texto:
Então:
As funções definidas pelo usuário (UDFs) são muito fáceis de instalar e usar:
Se você salvar a pasta de trabalho, a UDF será salva com ela. Se você estiver usando uma versão do Excel posterior a 2003, salve o arquivo como .xlsm em vez de .xlsx
Para remover o UDF:
Para usar o UDF do Excel:
Para saber mais sobre macros em geral, consulte:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
e
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
e para detalhes sobre UDFs, consulte:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
As macros devem estar habilitadas para que isso funcione!
Elogio sua vontade de usar VBA e UDFs que facilitam tantas coisas. As UDFs são um ótimo lugar para se familiarizar com o VBA para aqueles que não são, portanto, é um uso de gateway e, muitas vezes, uma ótima solução.
Você PODE fazer isso sem um UDF, se desejar. Muito rápido de fazer e não requer planejamento de abordagem como uma UDF costuma fazer, pois você deixará o Excel fazer o trabalho de descobrir como avaliar o resultado.
Também tem o objetivo de ser um Sim direto ao seu desejo de algo semelhante à
INDIRECT()
função.Você pode usar a função de linguagem macro antiga (25 anos)
EVALUATE
. Está disponível, MAS APENAS NA FUNÇÃO DE INTERVALO NOMEADO. (E em macros, mas uma boa macro já foi feita pelo Gary's Student.) Digitar a função na própria planilha falhará.Crie um
Named Range
(talvez chamado de "horsey"). Para o seuRefers to
valor insira a seguinte fórmula:e salve as coisas, fechando o gerenciador de intervalos nomeados.
Agora digitando
em QUALQUER célula da planilha (bem, exceto B2 e C2!) fará exatamente o
INDIRECT()
que faria com uma referência de célula. Ele pega a string (incluindo o "=" ou NÃO incluindo não faz diferença) em C2 e a trata como uma fórmula.As pessoas geralmente pensam
EVALUATE()
no papel restrito de transformar alguma entrada de célula17-5+32
em um resultado calculado, mesmo que seja texto e não tenha sinal de igual, então eles acham que não tem grande valor. Mas pode fazer coisas muito mais complicadas, como exatamente o que você está pedindo hoje.Especialmente porque agora
FORMULATEXT()
podemos modificar facilmente as fórmulas de trabalho.