Vamos percorrer o processo Avaliar juntos:
No meu exemplo, tenho o valor abf5fb6 na célula A2 , que é avaliado como 56 .
Primeiro passo, substitua A2 pelo valor em cell A2
Antes:
=SUM(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Depois:
=SUM(MID(0&"abf5fb6",LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Observe como o texto agora está dentro de um par de aspas. Isso significa que é texto, também conhecido como string .
Agora é um bom momento para explicar brevemente a função MID . Esta função simplesmente extrairá algum texto de uma string. O primeiro argumento é o texto, ou string, com o qual começaremos. O segundo argumento é a posição inicial de onde queremos começar a extrair. O terceiro argumento é o número de caracteres que queremos extrair ou o tamanho do nosso resultado final. Por exemplo, =MID("wizlog", 1, 3 retornará wiz , enquanto =MID("wizlog", 2, 5) retornará izlog
Assim, o próximo passo concatena o 0&"abf5fb6" , porque como mencionado acima, o primeiro argumento na função MID requer texto (novamente, chamado de string). Mas, para adicionar um número a uma string no Excel, use o símbolo & .
Antes:
=SUM(MID(0&"abf5fb6",LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Depois:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Agora, vamos pular para a próxima função MID para substituir o outro A2 por seu valor novamente, assim como antes.
Depois:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--MID("abf5fb6,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Em seguida, estamos lidando com o segundo argumento na segunda função MID , ROW($1:$99) . Lembre-se, o segundo argumento na função MID nos fornece a posição inicial. A função ROW , por outro lado, simplesmente retorna a linha que é dada, então, uma vez que passamos o intervalo de 1 a 99, ela retornará para nós uma matriz, ou uma lista, de 1 a 99. Isso significa que planejamos usar a função MID 99 vezes, cada vez iniciando em uma posição diferente de 1 a 99.
Antes:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--MID("abf5fb6",ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Depois:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--MID("abf5fb6",{1;2;3;...;99},1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
(Para economizar espaço, eu não digitei todos os números de 1 a 99, mas tenho certeza que você entendeu.)
Agora que temos todas as peças para a segunda função MID , podemos calcular essa parte.
Antes:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--MID("abf5fb6",{1;2;3;...;99},1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Depois:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--{"a";"b";"f";"5";"f";"b";"6";"";"";"";...;""})*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Então, o que aconteceu aqui? Bem, a função MID apenas retorna uma substring da string dada, começando no local dado, para o número especificado de caracteres. Então, nós demos a ela a string, abf5fb6 , atribuímos uma matriz de posições iniciais, especificando que só queremos extrair 1 caractere. Assim, a função retorna para nós uma matriz de cada caractere em nossa string, de 1-99. Como a string inicial tinha apenas 7 caracteres, as posições 8-99 estão vazias, e por isso temos todas as subseqüências vazias depois, ( "";"";"";...;""; ).
A próxima função a ser calculada é a função ISNUMBER , mas primeiro vamos examinar um recurso estranho que fazemos primeiro. Observe como há um duplo negativo na frente de nossa nova matriz. Enquanto um único sinal de menos inverterá o resultado de um resultado (se TRUE retornar FALSE e visa-vera), mas um duplo menos significa forçar a resposta da string em um número. Normalmente, isso resultará nas respostas de TRUE para transformar em 1 e FALSE para se transformar em 0 , mas, nesse caso, estamos convertendo cada caractere em nossa matriz em um número. Assim, entrar em --"a" resultará em #VALUE! , enquanto a entrada em --"5" resultará em 5 .
Assim, quando executamos a função ISNUMBER :
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--{"a"; "b"; "f"; "5"; "f"; "b"; "6"; ""; ""; ""; ...; ""})*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
O que estamos realmente executando nos bastidores é:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER({#VALUE!; #VALUE!; #VALUE!; 5; #VALUE!; #VALUE!; 6; #VALUE!; #VALUE!; #VALUE!; ...; #VALUE!})*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Como resultado, ele transforma uma matriz de TRUE ou FALSE indicando se o valor era um número ou não. Daí nós temos:
=SUM(MID("0abf5fb6",LARGE(INDEX({FALSE; FALSE; FALSE; TRUE; FALSE; FALSE; TRUE; FALSE; FALSE; ...; FALSE})*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Acabou o tempo Bem, eu estou no trabalho fazendo o que eu não deveria estar fazendo, e isso foi tanto quanto eu cheguei antes de eu realmente fazer algo produtivo hoje. Espero retomar de onde parei mais tarde.
