Como definir um alias para a função do usuário no Excel?

3

Estou procurando uma maneira de definir algum tipo de alias no Excel. Digamos que eu tenha essa longa função para categorizar / marcar todas as linhas da lista de despesas:

=IF(ISNUMBER(SEARCH("Curry",$F2)),"Curry",IF(OR(ISNUMBER(SEARCH({"LIDL","TESCO","ALBERT","BILLA"},$F2))),"Groceries",IF(OR(ISNUMBER(SEARCH({"FITINN","GM ELECTRONIC"},$F2))),"Fun","")))

Ele simplesmente verifica a célula vizinha e preenche uma tag em uma célula atual. Agora, digamos que essa função tenha centenas de linhas, então não quero colocá-la em todas as linhas de uma folha. Gostaria de criar um alias chamado 'tag' e colocar apenas a tag = em todas as células. Como faço para conseguir algo assim?

    
por Ren 11.05.2016 / 13:16

3 respostas

1

Você precisa liberar algum VBA para cuidar disso. Basicamente, você define sua função, "TAG" no seu caso, usando o editor VBA, e depois anexa o módulo resultante à sua planilha. Então você pode usar "= TAG (...)" na barra de fórmulas do Excel como se fosse um builtin.

Veja aqui para orientação. A frase mágica para o google for é função definida pelo usuário.

    
por 04.02.2017 / 04:50
1

Use tabelas.

Destaque o retângulo inteiro de células, incluindo sua linha de cabeçalho, escolha "Inserir tabela" e transforme-o em uma tabela.

Em seguida, substitua sua menção de F2 por [@ColumnTitle] , em que "ColumnTitle" é o título da coluna de F. [ColumnTitle] refere-se à coluna inteira, [@ColumnTitle] refere-se à célula dessa coluna na linha atual. / p>

Depois de substituir a linha inteira por uma fórmula que não use a notação "A1", que é a mesma para todas as células dessa linha, então a fórmula é armazenada exatamente uma vez, independentemente de quantas linhas estão na tabela . Se você alterá-lo em qualquer célula, ele mudará para toda a coluna, sua manutenção acaba de diminuir consideravelmente e sua fórmula fica mais legível.

E, a propósito, você também pode usar UDFs em tabelas, assim você pode ter uma fórmula de =MyUDF([ColumnTitleA],[@ColumnTitleA],Offset([@ColumnTitleB],-1,0)) e ela passará todos os dados em A, a célula em A para a linha atual e a célula em B para a linha anterior.

    
por 04.02.2017 / 06:55
0

Você pode considerar o seguinte como um pouco mais fácil:

=INDEX($F$2:$F$8,MATCH(TRUE,NOT(ISERROR(SEARCH($E$2:$E$8,$A$2))),0))

Eu testei com a seguinte configuração - a fórmula acima está na célula A5

    
por 11.05.2016 / 17:49