É possível criar uma função de usuário personalizada no Excel sem usar o VBA?
Meu problema é que tenho uma longa série de funções padrão do Excel unidas para criar uma função muito longa. Essa função é usada em 25 planilhas diferentes na minha pasta de trabalho. Se precisar fazer alterações, gostaria de fazê-lo em apenas um lugar e ter as alterações propagadas em todas as folhas automaticamente.
Por exemplo, um caso simples e trivial seria adicionar um ao resultado de SUM (), ie. SUM (mySeries) +1 e chame-a de nova função MYSUM ().
Hesito em traduzir a fórmula longa em VBA devido aos possíveis erros que podem surgir e à complexidade adicional.
microsoft-excel
worksheet-function
vba
DakotaD
fonte
fonte
Respostas:
Sim, é possível se você usar fórmulas nomeadas do Excel .
Por exemplo, suponha que você precise calcular a diferença entre as somas de duas colunas consecutivas ( A5: Ax - B5: Bx ) em locais diferentes da sua pasta de trabalho ( x é a linha final de cada coluna):
Portanto, você define em A11 um nome chamado diff (qualquer nome pode ser usado) como = Sum (A $ 5: A10) -Soma (B $ 5: B10) , assumindo que os dados iniciem na linha 5 até a linha anterior. Pode ser qualquer célula, não apenas A11 , mas a definição muda da mesma maneira.
Infelizmente, o Excel 2010 insere prefixos absolutos ( $ ) e prefixos de planilhas; portanto, você precisa apagar os prefixos, mas mantendo os pontos de exclamação e a maioria dos caracteres de $ .
Quando você move as fórmulas, a maioria das referências é relativa. Portanto, ele sempre calcula a diferença entre a coluna atual e a seguinte, começando da linha 5 até a linha antes da linha total.
Portanto, se você tiver dados entre C5 e D100, insira apenas = Diff em C101 e ele calculará Soma (C5: C100) - Soma (D5: D100) .
Obviamente, você pode usar nomes locais ou globais nas fórmulas nomeadas, como mencionado na sua pergunta.
Você pode ler mais detalhes em Fórmulas nomeadas .
fonte
Eu sei que você disse que não VBA, mas fazer o seguinte NÃO exige que você realmente reescreva suas fórmulas, conheça muito sobre VBA, nem mantenha suas fórmulas no VBA. Você pode escrever uma vez e esquecer.
Crie uma função definida pelo usuário para extrair a fórmula de uma célula como uma sequência:
Crie outra para avaliar uma sequência como uma fórmula:
Se você tivesse sua fórmula mestre na planilha1! A1, colocaria isso em todas as células que precisam usá-la:
fonte
=IF(BlankOrWhitespace(A5),true,false)
. Para Fórmulas nomeadas, isso não é possível porque você está fazendo referência ao conteúdo da fórmula de uma célula e não definindo uma nova funçãoEste tópico é um pouco antigo, mas eu tropecei nele procurando por outra coisa e pensei em compartilhar uma pasta de trabalho que criei há algum tempo tentando realizar exatamente isso: https://www.dropbox.com/s/gf5qrjj5q81tpke/ Title_Case_Named_Range_Function.xlsx? Dl = 1
Em suma, você PODE criar um UDF sem VBA (mais ou menos) seqüestrando uma das fórmulas internas do Excel com uma saída de seqüência de caracteres de 0 comprimento e criando um método para interpretar os dados inseridos por meio da manipulação de seqüência de caracteres de Faixa Nomeada, mas é além de ineficiente para fazê-lo. VOCE FOI AVISADO! :)
MÉTODO:
No exemplo, usei = REPT ([referência de célula ou algum texto entre aspas aqui], 0) e = TEXTO ([referência de célula ou algum texto entre aspas aqui], ";;;)) como ponto de partida capaz de ter alguma forma de entrada do usuário em uma fórmula interna que não produziria nenhum resultado de texto visível na própria célula.
Em seguida, criei um intervalo nomeado que seria o equivalente ao seu nome UDF (o TCase é o exemplo principal da planilha, mas também existem várias outras variações). Na verdade, esse intervalo nomeado faz referência a um host inteiro de outros nomes ocultos na pasta de trabalho para extrair o FormulaText da célula em que é usado e, em seguida, aplica alguma lógica a ele para produzir uma saída final como uma string. Vale ressaltar que esse método só pode retornar resultados de texto e não números (embora possa retornar um número como texto para ser convertido em uma célula separada).
Por si só, = TCase produz um erro, pois não há uma referência de célula / string para ela interpretar (na planilha de exemplo, a mensagem de erro é apenas um lembrete do formato que precisa ser seguido). Mas, combinando o TCase com a fórmula esperada do Excel de seqüência de caracteres com 0 comprimento, ele pode ler a entrada da fórmula como uma sequência e aplicar sua lógica a ela. No final, a fórmula / saída seria algo como abaixo. Observe que inseri a sequência de texto diretamente na fórmula abaixo, mas você verá na planilha de exemplo que ela também pode interpretar uma única referência de célula.
FÓRMULA:
=TCase&REPT("i want to convert this mIxEd sTRing into A TITLE cAsE string!!!",0)
RESULTADO:
No final, eu não recomendaria seguir esse método por outra curiosidade mórbida para ver para que limites o Excel pode ser pressionado. O VBA é uma solução UDF muito mais simples e elegante, mas pelo menos eu me diverti assumindo o desafio.
NOTA: Se você quiser ver como ele funciona no arquivo de exemplo um pouco mais fácil, use a opção Avaliar fórmula na faixa de opções Fórmulas e entre / saia da fórmula em uma das células onde inseri um exemplo. Eu escondi todas as escalas nomeadas subjacentes para limpar tudo depois que terminei, para que elas não apareçam no Gerenciador de nomes, a menos que você as oculte.
fonte