Avaliação de expressão e planilha do Excel
Aplica-se a: Excel 2013 | Office 2013 | Visual Studio
O conteúdo da célula de planilha do Microsoft Excel é avaliado em um dos quatro tipos de dados básicos:
- Números
- BOOLEAN TRUE ou FALSE
- Cadeias de caracteres
- Erros
Matrizes de tipo misto desses tipos também podem ser inseridas em fórmulas como argumentos para funções ou como valores que abrangem mais de uma célula em uma fórmula de matriz.
Quando um usuário (ou uma macro de comando) insere algo em uma célula, o Excel tenta interpretar a entrada e exibe uma mensagem de erro se não puder. Se a entrada começar com um prefixo de cadeia de caracteres (uma única marca de cotação) o Excel colocará todos os caracteres de entrada na célula conforme fornecido, sem modificação. (O prefixo de cadeia de caracteres não é exibido.) Se a entrada começar com =, +ou -, o Excel tentará interpretar a entrada como uma fórmula. Se a sintaxe estiver incorreta ou a avaliação for interrompida, um erro será exibido e a célula será colocada no modo de edição. Caso contrário, o Excel tenta identificar, converter e avaliar operadores, nomes de funções e seus argumentos.
Operandos são avaliados da esquerda para a direita antes que o operador seja aplicado. As funções são avaliadas começando com os operadores de precedência mais alta e o mais interno (mais aninhados). Se argumentos de função ou operandos não puderem ser convertidos nos tipos esperados, a avaliação falhará e resultará em um erro de #VALUE! . Quando um token (que não é um valor literal) não é reconhecido como uma função ou nome ou rótulo definido, a avaliação falha e resulta em um erro de #NAME?
Se a entrada não começar com nenhuma dessas coisas, o Excel verificará os padrões de entrada conhecidos, como datas, horários, quantidades de moeda, percentuais ou números, e interpretará de acordo. Isso é feito de forma específica da localidade. Se nenhuma dessas interpretações fizer sentido, o Excel reverterá para considerar a entrada como uma cadeia de caracteres e a colocará na célula inalterada.
O Excel dá suporte a outros tipos de dados, dos quais o mais visível é uma referência de intervalo. O Excel converte referências aos valores das células referenciadas ao avaliar argumentos para operadores e funções que não têm argumentos de referência ou quando a expressão em uma fórmula celular reduz a uma referência.
O Excel expõe a capacidade de reduzir qualquer cadeia de caracteres válida para um dos quatro tipos de dados básicos de planilha com a função XLM ASSESS e sua API C equivalente xlfEvaluate. Essa função fornece, entre outras coisas, uma maneira simples de avaliar intervalos nomeados no código DLL. Essa função difere do comportamento descrito anteriormente apenas em que, em vez de exibir mensagens de erro ou habilitar a edição de célula, ela retornará um erro #VALUE! se a avaliação de expressão falhar.
Números
Todos os números de planilha no Excel são representados internamente como ponto flutuante de precisão dupla de 8 bytes, incluindo todos os inteiros. No entanto, a implementação desses números no Excel não está totalmente em conformidade com o IEEE, conforme mostrado na tabela a seguir.
Tipo | Maximum | Minimum |
---|---|---|
Duplo de 8 bytes do IEEE |
1.7976931348623157E+308 |
2.2250738585072014E-308 |
Planilha (retornada por função ou valor de colar) |
1.7976931348623157E+308 |
2.22507385850721E-308 |
Planilha (entrada manual) |
9.999999999999999E+307 |
2.22507385850721E-308 |
Números subnormal do IEEE (ou seja, números no intervalo 2.2250738585072009E-308 a 4.9406564584124654E-324) não têm suporte nas planilhas do Excel, mas têm suporte em Duplas VBA.
Se uma função DLL retornar iEEE +/- infinito ou um duplo inválido, o Excel a converterá em #NUM!. Todos os números e números subnormal menores que o normal mínimo positivo no Excel são convertidos em zero positivo. Há suporte para o zero negativo do IEEE, ou seja, ele pode ser retornado por uma função DLL e é exibido como -0. (O < operador não marcar para zero negativo e, portanto, =A1<0 é avaliado como TRUE se a A1 contiver zero negativo).
Observe que determinados formatos de número têm limites mais estreitos do que esses, por exemplo, datas e horários. A divisão inteiro é, de fato, divisão de ponto flutuante e pode, em casos extremos, produzir um resultado não inteiro em que o resultado preciso deve ser inteiro.
Cadeias de caracteres unicódigos longas
Todas as cadeias de caracteres que o usuário vê no Excel têm para muitas versões agora armazenadas internamente como cadeias de caracteres Unicode. As cadeias de caracteres de planilha unicode podem ter até 32.767 caracteres (215 – 1) de comprimento e podem conter qualquer caractere Unicode válido.
Quando a API C foi introduzida pela primeira vez, as cadeias de caracteres de planilha eram cadeias de caracteres de bytes limitadas em comprimento a 255 caracteres, e a API C refletia essas limitações. Com o Excel 2007, a API C é atualizada para lidar com cadeias de caracteres Unicode longas do Excel. Isso significa que as funções DLL registradas da maneira correta podem aceitar argumentos Unicode e retornar cadeias de caracteres Unicode.
Observação
As cadeias de caracteres de bytes ainda têm suporte total na API C para compatibilidade com versões anteriores; no entanto, eles ainda têm o mesmo limite de 255 caracteres.
Retornando erros
O Excel avalia células em erros em que não pode converter argumentos de função ou operador para o tipo correto ou se ele não reconhece uma função ou nome definido. Ambos os cenários foram descritos anteriormente. Quando as funções de planilha interna e os operadores falham, eles também resultam em erros que informam o usuário do tipo de falha. Você deve ter suas próprias funções de suplemento retornando erros consistentes com o comportamento no Excel.
#NULL!
O erro #NULL! é retornado por algumas funções de informações XLM. Por exemplo, chamando GET. DOCUMENT(78), ou a função de API C equivalente xlfGetDocument com o argumento 78, quando não há impressoras instaladas resulta no retorno desse erro. Ele também pode ser retornado por algumas funções quando, por exemplo, eles avaliam uma cadeia de caracteres vazia.
Talvez você queira retornar esse erro da função de suplemento quando nenhum dos outros erros parecer apropriado.
#DIV/0!
O operador de divisão do Excel retorna o erro #DIV/0! quando o denominador avalia como zero ou um número é muito pequeno para ser representado como não zero pelo Excel. Algumas funções que, por definição, envolvem uma divisão também podem retornar esse erro. Por exemplo, AVERAGE retornará esse erro se nenhuma das entradas puder ser convertida em números.
Você só deve considerar retornar esse erro de sua função de suplemento para indicar que uma divisão por zero foi detectada.
#VALUE!
O Excel retornará o erro #VALUE! se um argumento de função ou operador não puder ser convertido no tipo necessário. No caso de argumentos de função que não podem ser convertidos, por exemplo =LN("X")
, o Excel não chama o código de função. Esse é um ponto importante a ser lembrado ao escrever e depurar suas próprias funções de suplemento.
Algumas funções retornam esse erro se um argumento não puder ser convertido no código da função. Por exemplo, DATEVALUE("30-Feb-2007")
falha com esse erro, apesar do argumento ser do tipo certo. Nesse caso, é a função que está retornando o erro de dentro de seu código. Algumas funções retornam esse erro mesmo que os tipos e intervalos de valor sejam permitidos, por exemplo FIND("a","xyz")
, retorna esse erro.
Considere retornar esse erro de sua função de suplemento para indicar que os argumentos são do tipo errado, não podem ser convertidos no tipo certo ou estão fora do intervalo, embora você considere retornar #NUM! para argumentos numéricos fora do intervalo. Você também deve considerar retornar esse erro quando argumentos de intervalo ou matriz forem a forma ou o tamanho errados.
#REF!
O Excel gera o erro #REF! dentro de uma expressão quando ele é copiado para um local em que a referência relativa resultante sai dos limites. Por exemplo, se a célula B2 contiver a fórmula =A1
, copiar isso para a célula B1 resultará em uma fórmula =#REF!. Esse erro também é gerado em fórmulas que contêm uma referência que é substituída em uma operação de corte e cola ou é excluída em uma linha, coluna ou exclusão de planilha. Algumas funções que podem retornar referências podem retornar esse erro, por exemplo, OFFSET(A1,-1,-1)
. Nomes de planilha cujas definições contêm referências que se tornam inválidas são avaliados para esse erro.
Se sua função de suplemento usa argumentos de referência, considere retornar esse erro se as referências forem inválidas ou se você receber um erro de referência. A seção sobre XLOPER/XLOPER12s no Gerenciamento de Memória no Excel descreve como criar funções que podem aceitar e retornar argumentos de referência.
#NAME?
O Excel gera o erro #NAME? quando uma expressão contém um token que não é reconhecido como uma função ou nome definido. Se sua função de suplemento tentar acessar um nome definido e ele não estiver definido, você deverá considerar retornar esse erro.
#NUM!
Muitas das funções numéricas e matemáticas internas no Excel retornam o erro #NUM! quando uma entrada numérica está fora do intervalo permitido, por exemplo, LN(0)
. Considere retornar esse erro da função de suplemento para indicar que uma entrada numérica era inválida ou fora do intervalo.
#N/A
O erro #N/A geralmente é retornado para significar que um resultado bem-sucedido ou significativo não está disponível. Por exemplo, MATCH com o terceiro argumento zero retornará esse erro se uma correspondência exata não puder ser encontrada. Esse erro também pode ser gerado usando a função NA e detectado especificamente com a função ISNA. Portanto, é um erro comumente usado em planilhas para indicar um intervalo de condições específicas do aplicativo.
Confira também
Conceitos de programação do Excel
Programação com a API de C no Excel